목록분류 전체보기 (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..