목록Swift (208)
HIT해

protocol Pet { func doCry() }class Cat : Pet { } 이렇게 구현하면 doCry가 정의되어 있지 않기때문애 Cat Class에서 반드시 정의해주어야한다. 이를 어떻게 해결 할 수 있는가. 1. extension을 통한 옵셔널protocol Pet { func doCry()}extension Pet { func doCry(){}}class Cat : Pet { } 2. Objective-C 을 활용한 옵셔널@objc protocol Animal { @objc func doMoreCry()}// 에러class Cat : Animal{ } 위와 같이 @objc로 프로토콜을 선언할 수 있는데objc의 경우 자체적으로 옵셔..

Nested Type이란?sturct나 enum 안에 다른 타입을 넣는 걸 뜻한다. 예시struct MyPet { enum Kind { case cat case dog var value : String { // 자기 자신을 switch구문으로 정의할 수 있다. switch self { case .cat : return "고양이" case .dog : return "강아지" } } } // Kind enum} value를 중첩타입이라고 부른다 struct MyPet { enum Kind { cas..

Swift에서 자료형을 체크하는 방법을 알아보려한다.if isguard isswitch case isif case isguard case is if isclass Cat {}class Dog {}let myCat = Cat()if myCat is Cat { print("고양이입니다")} guard is func checkIfIsCat(){ guard myCat is Dog else { print("고양이가 아닙니다") return } print("고양이입니다.")}checkIfIsCat() // 고양이가 아닙니다 switch case isswitch myCat {case is Dog: print("강아지입니다.") // 자료형 명을 변경해서 확인..

프로토콜을 적용하는데 특정 class에만 적용을 하고싶다면extension 프로토콜명 where Self : 클래스명 {} 으로 구현할 수 있다! 프로토콜 조건부 적용 예시import Foundationprotocol Naming{ var name : String {get set} }class Cat : Naming { var name: String init(name: String) { self.name = name }}class Dog : Naming{ var name: String init(name: String) { self.name = name }}// 자기 자신이 만약 고양이다extension Naming where Se..

Toggle이란?Bool 변수를 간단하게 변경하는 함수 var isDarkMode : Bool = falseisDarkMode.toggle() // true
Singleton 패턴이란?스위프트에서 객체를 생성하는 대표적인 방법론애플리케이션이 시작될 때 객체의 인스턴스를 최초 1회만 생성하여 사용하는 디자인 패턴이다!메모리를 하나만 쓰는 것이 특징이다. 일반적인 객체 생성 사용 예시class Pet{ }let Pet1 = Pet()let Pet2 = Pet() 이렇게 생성했을때 Pet1과 Pet2는 다른 메모리 주소를 할당받는다.그럼 메모리를 두배로 차지하기에 비효율적이라고 말할 수 있다. Singleton 패턴 사용 예시final class Pet{ static let shared = Pet() private init(){}}let Pet1 = Pet.sharedlet Pet2 = Pet.shared 이때 Pet1과 Pet2는 같은 ..

지난 포스팅에서 블렌더 설정값을 가져오지 못하는 상황을 겪게 되고... fbx 뿐만 아니라 mtl , obj , usdz.... 3D 모델 파일의 대표주자 녀석들 모두 블렌더 설정값을 가져오지 못하는 사태가 발생했다. blender to Swift 로 dae 확장자를 자주 쓰는 것을 확인하고 적용해보니 다른 파일들과는 사뭇 다른 모습이 보였다. 바로 Physically Based 를 했을때 블렌더 설정값이 나온다는 것이었다. 그럼 dae 파일을 출력하는 방법에 대해 알아보자 1. dae 프로젝트 추가하기dae 파일을 가져올때 obj usdz 파일과 마찬가지로 SceneKit Tool 에 드래그 앤 드랍으로 가져와 scn 파일로 import 해준다. 2. Materials 추가하기 + 버튼을 눌러 등..

Open 이란?프로젝트 내 어디서든 사용가능하다다른 외부 모듈에서도 상속 및 오버라이드가 가능하게 한다예) 오픈소스 및 외부 라이브러리 구조, 애플 프레임워크uibiewcontroller 클래스명 Cmd + click 을 하면 open 키워드를 볼 수 있다. 상황예시1. 다른 폴더안의 Utilsclass Utils{ class func sayHello(){ print("하이") }} 2. import하여 사용하고자 함import Utils // 파일명class ViewContoller : UIViewController { override func viewDidLoad(){ super.viewDidLoad() Utils.sayHello() }} ..