Initialization
인자없는 init을 자동으로 생성
init을 만든다면 인자없는 자동생성 init을 사용하지 않는다
struct MyStruct {
var x: Int
var y: String
}
let foo = init(x: 5, y: "hello")
init 안에서 할 수 있는 것
프로퍼티 값 설정(심지어 이미 기본값을 가지고 있어도 설정 가능)
상수도 설정 가능
여러 init메소드에서 다른 init메소드를 한개만 호출 가능
부모 클래스의 init도 호출 가능
init 안에서 반드시 해주어야 할 것
init이 끝날 때는 모든 프로퍼티가 값을 가져야 함
클래스에서는 init메소드로 두개의 타입이 존재
- 지정초기화를 직접 구현하지 않아도 되는 경우: 생성자를 작성하지 않아도 모든 프로퍼티가 기본값을 가질 때
편의 초기화 함수
- convenience initializers(convenience init)
- 모든 프로퍼티 초기화 하지 않아도 됨. 편의 초기화함수는 그 클래스 안에서 지정init이나 편의init을 호출하고 초기화 필요
- 부모 클래스의 초기화 함수 부를 수 없음
- 편의 초기화 함수는 어떤 프로퍼티의 값 설정 전 반드시 그 init을 호출해야 함
지정 초기화 함수
- designated initializers(init)
- 부모클래스에 있는 지정 초기화 호출 필요(부모클래스의 편의 초기화 함수 호출불가)
- 부모 클래스 init을 부르기 전 클래스에서 만든 모든 프로퍼티 초기화 필요(super.init 부르기 전 모든 프로퍼티 초기화 필요)
- 부모 클래스 프로퍼티 접근 전 부모클래스의 init 호출 필요
- 일을 하고 부모를 부른 후에야 부모클래스 프로퍼티에 접근이 가능
상속
- 지정init을 어떤것도 실행하지 않는다면 부모클래스의 모든 지정init 상속
- 부모클래스의 모든 지정init을 override하거나 그것들 중 어느것도 실행하지 않으면 부모클래스로부터 모든 편의 초기화 함수 상속 가능
- 부모클래스의 편의 초기화 함수는 부모클래스의 지정 초기화 함수에 종속적(서로 연결동작)
- 초기화 하지 않으면 부모클래스의 초기화 함수 모두 가지게 됨(편의든 지정이든)
Required init
자식클래스는 이 init을 반드시 실행해야 한다는 뜻
Failable init
실패할 수 있는 init
초기화 실패 시 옵셔널 값이 반환될 수 있도록 함
드물게 사용
"foo"라는 이름으로 이미지를 찾지 못하면 nil 반환
init?(arg1: Type1, ...){
//might return nil in here
}
let image = UIImage(named: "foo") //image는 UIImage?
if let image = UIImage(named: "foo"){ ... }
어려워서 블로그 참고해서 이해하는데 도움을 받았다. 정리가 너무 잘되어있는..👍
https://babbab2.tistory.com/168
https://babbab2.tistory.com/170
'iOS > 스탠포드 iOS 강의' 카테고리의 다른 글
[스탠포드iOS] Gestures (1) | 2024.03.22 |
---|---|
[스탠포드iOS] Text & Image (0) | 2024.03.20 |
[스탠포드iOS] View (0) | 2024.03.19 |
[스탠포드iOS] Swift 기초문법 정리(AnyObject, Plist, NSUserDefault) (1) | 2024.03.17 |
[스탠포드iOS] Swift 기초문법 정리(Array, Dictionary, String ) (0) | 2024.03.16 |