목록전체 글 (30)
sanichdaniel의 iOS 개발 블로그
UIView, UIViewController 생성할때 호출해주는 생성자들에 대해 알아보자 UIViewController 생성자 initWithNibName initWithCoder UIView 생성자 initWithFrame initWithCoder 둘다 공통적으로 initWithCoder이 있는것을 확인할수있다 initWithCoder nib에서 로드할때 호출되는 생성자다. 호출 시점에는 아직 outlet/action이 연결되지 않았다. initWithNibName 뷰컨의 지정생성자다. 코드로 뷰컨을 생성할때 호출된다. initWithFrame 뷰의 지정생성자 코드로 뷰를 생성할때 호출된다. awakeFromNib() nib에서 모든게 로드되고, outlet & action이 모두 연결되면 호출되는게 ..

viewController의 view의 생성시점을 알아보자 loadView() 뷰컨의 루트 view를 만든다 뷰컨트롤러는 view 프로퍼티가 nil인 경우 이 함수를 호출한다. 이 함수는 view를 로드하거나 새로 생성해서 view 프로퍼티에 할당한다 만약 뷰컨트롤러가 스토리보드와 연관되어있다면 스토리보드에서 뷰를 로드한다. 아니라면 빈 UIView 객체가 생성되서 할당된다. 만약 뷰컨트롤러의 뷰를 수동으로 만들고 싶다면 이 함수를 오버라이드 하면 된다. 절대 super을 호출하면 안된다. 사용 예시 뷰컨트롤러의 view의 터치가 통과하게 바꾸고 싶을때 (super 호출하지 않은것을 확인할수 있다) override func loadView() { view = PassthroughView(frame: .z..

뷰컨을 생성할때 인자를 넣어주고 싶을때가 있다. 그래서 생성자를 만들어주고 인자를 주입하면 2가지 에러가 뜬다. 1. super.init isn't called on all paths before returning from initilizer 2. 'required' initializer 'init(coder:)' must be provided by subclass of 'UIViewController' swift 공식 doc를 읽으며 위 2가지 에러가 왜 뜨는지 알아보자! Initialization 개념 인스턴스를 사용하기전에 준비하기. 저장 프로퍼티의 기본값을 주고, 필요에 앞서 이것저것 세팅을 해준다 Memberwise Initializer strut는 명시적으로 initializer 명시하지 않는..
Self는 자기 자신의 타입을 가리키는 문법적 슈가 이다. 자신의 타입을 반복하거나, 명시 안하고 사용할수 있다 1. 프로토콜에서 Self 타입은 프로토콜을 채택할 타입을 가리킨다. 2. struct, class, enum 에서 Self 타입은 현재 자신이 속해있는 선언의 타입 class Superclass { func f() -> Self { return self } } let x = Superclass() print(type(of: x.f())) // Prints "Superclass" class Subclass: Superclass { } let y = Subclass() print(type(of: y.f())) // Prints "Subclass" let z: Superclass = Subclas..
값의 dynamic 타입을 리턴해주는 함수 static 타입: 컴파일 타임에 타입 dynamic 타입: 런타임에 실제 타입 아래의 예시에서 count 변수는 static, dynamic 타입이 모두 Int이다. 하지만 value 인자의 static 타입은 Any이고, dynamic 타입은 Int이다. func printInfo(_ value: Any) { let t = type(of: value) print("'\(value)' of type '\(t)'") } let count: Int = 5 printInfo(count) // '5' of type 'Int' protocol MyProtocol {} class SomeClass: MyProtocol {} let someClass: MyProtocol ..
Metatype 타입이란, 타입의 타입입니다. class, structure, or enum의 메타타입은 자신의 이름 뒤에 .Type이 옵니다. protocol 타입의 메타타입은 이름 뒤에 .Protocol 이 옵니다. class Some { } let someType: Some = Some() let metaSomeType: Some.Type = type(of: Some()) Some 타입은 Some 클래스의 인스턴스 타입이고 Some.Type은 Some 클래스 자체의 타입 = 메타타입 .self postfix .self 를 이용하여 타입을 값으로 접근할수 있습니다. SomeClass.self 는 SomeClass 의 인스턴스가 아닌, SomeClass 타입 자체를 리턴합니다. SomeProtocol...