본문 바로가기
앱/iOS(Swift)

[Swift] Initialization

by 리드맥 2022. 1. 28.

free init: 클래스가 인자없는 init을 자동생성, 별로 추천하지 않음 

struct A {
	var x: Int
    var y: String
    }
    
    let foo = A.init(x:5, y:"hello")

 init 안에는 반드시 해주어야 하는 요구사항이 있는데 어떤 init가 끝나는 시점에는 모든 프로퍼티는 반드시 값을 가져아한다

 

클래스는 init 메소드로 두가지 타입이 있는데 convenience initializers(편의 초기화함수), designated initializers(지정 초기화함수)가 있다

지정 초기화는 부모클래스에 있는 지정 초기화를 호출해야만한다. 지정 초기화는 부모클래스에있는 편의 초기화를 호출할 수 없고, 클래스에서 부모의 편의 초기화함수를 호출할 수 없다.

클래스에서 내가 만든 모든 프로퍼티를 부모 클래스의 init를 부르기전에 전부 초기화 해놔야 한다

부모클래스에 있는 어떤 프로퍼티를 건들기 전에 부모클래스의 init를 호출해야한다

나자신 프로퍼티 init -> 부모 호출 -> 부모 프로퍼티 접근

 

편의 초기화 함수는 그 클래스 안에서 편의 init이나 지정 init 를 호출하고 초기화해야한다 . 편의 초기화함수는 부모클래스의 초기화 함수를 부를 수 없다. 어떤 프로퍼티 값을 설정할 수 있기 전에 반드시 그 init를 호출해야한다. 자신 이나 부모클래스에 있는것

 

다른 init를 부르는것은 어떤 프로퍼티에 접근하기전에 완료되야한다

 

init를 지정해놓지 않으면 부모클래스의 모든 지정 init를 상속한다

 

부모클래스의 모든 지정 init를 override하거나 그것들중 어느것도 실행하지 않으면 부모 클래스에 있는 모든 편의 초기화함수를 상속받을 수 있다

 

초기화함수를 실행하지 않으면 부모클래스의 모든 초기화 함수를 갖게된다

 

 Required init: 자식클래스는 이 init을 반드시 실행해야 한다는 뜻

 

Failable init: init?(.....), 초기화가 실패하면 nil을 반환한다

' > iOS(Swift)' 카테고리의 다른 글

[Swift] awakeFromNib  (0) 2022.01.29
[Swift] AnyObject  (0) 2022.01.28
[Swift] Tuples, Range  (0) 2022.01.27
[iOS] MVC 패턴  (0) 2022.01.26
[iOS] 앱 생명주기  (0) 2022.01.23

댓글