Designated Init (지정 초기자)
- 클래스 타입은 반드시 한개 이상의 Designated Init이 필요하다.
- 클래스의 모든 프로퍼티를 초기화해야한다.
class Person {
var name: String
var age: Int?
var address: String
init() {
name = "DH"
address = "서울특별시"
}
init(name: String, address: String) {
self.name = name
self.address = address
}
}
Convenience Init (보조 초기자)
- Convenience init 내부에서 반드시 Designated Init이 호출되어야 한다. (self.init())
class Person {
var name: String
var age: Int
var gender: String
init(name: String, age: Int, gender: String) {
self.name = name
self.age = age
self.gender = gender
}
convenience init(age: Int, gender: String) {
self.init(name: "zedd", age: age, gender: gender)
}
}
Failable Init (오류가능 초기자)
- 초기화에 필요한 매개변수들을 전달받고 만족하지 못할 경우 nil로 처리할 수 있다.
- 초기화가 실패했을 때는 nil을 반환해야하지만 초기화가 성공했을 떄도 무언가를 반환할 필요는 없다.
init?(name: String, address: String, age: Int) {
guard age <= 100 else { return nil }
self.name = name
self.address = address
self.age = age
}
Super.init
- 상속을 받아서 사용하는 경우에는 Initializer를 부모의 것도 처리를 하여 주어야 한다.
- 이유: 자신이 사용할수 있는 프로퍼티에 대해서 모두 초기화가 되지 않기 때문이다.
- 위의 상황일 때 사용한다.
- Designated Initializer가 한개만 존재할 경우에는 별도로 따로 호출하여 줄 필요가 없다
class Person {
var name: String
var age: Int?
var address: String
init() {
name = "DH"
address = "서울특별시"
}
init(name: String, address: String) {
self.name = name
self.address = address
}
}
class EastPerson : Person {
var school: String
var money: Int
override init() {
super.init() // Fail
school = "서울고등학교"
money = 0
}
init(school: String) {
self.school = school
self.money = 0
super.init() // Okay
}
}
required init (필수적인 초기자)
- 생성자의 재정의를 필수적으로 해줘야 한다는 것을 알려주기 위해서 사용한다.
- 서브클래스에서 super.init이 아닌, 직접 구현해야 하는 초기화 메소드이다.
- 해당 부분은 아직 이해가 부족해 좀 더 찾아본 다음 글을 작성하려고 한다.
'iOS - 실무관련 > iOS' 카테고리의 다른 글
NotificationCenter로 다른 VC 조종하기 (0) | 2022.08.17 |
---|---|
IBSegueAction사용해서 화면전환하기 (0) | 2022.08.04 |
label 행간 조정 (0) | 2022.07.05 |
dismiss를 하고 이벤트 발생 시키는 방법 (0) | 2022.06.23 |
Notification push 앱에서 알람 거부에서 허용으로 설정 (0) | 2022.06.14 |