초기화 시점에 모든 프로퍼티들은 기본 값을 가지고 있어야한다. 만약 기본 값이 없는 프로퍼티가 있을 경우, 초기화에 실패하여 인스턴스가 생성되지 않는다.
class Human {
let name: String = "abc"
let age: Int = 123
}
class Human {
var name: String?
var age: Int?
}
하나의 프로퍼티라도 기본 값을 지니지 않거나, 옵셔널 타입의 변수가 아니라면 init함수를 통해 나머지 프로퍼티도 초기화를 진행 해줘야 함
class Human {
var name: String?
let kickName: String = "abc"
let age: Int
init(name: String){
self.age = 28
}
}
클래스의 모든 프로퍼티를 초기화 하는 생성자
class Human {
let name: String
let age: Int
init(name: String) {
self.name = name
self.age = 28
}
}
class Human {
let name: String
init(name: String) {
self.name = name
}
}
class People: Human {
let alias: String
init(alias: String) { // 에러.
self.alias = alias
}
}
class People: Human {
let alias: String
init(alias: String) {
self.alias = alias
super.init(name: alias) // super 클래스 생성자 호출
}
}
모든 프로퍼티를 초기화 할 필요없는 생성자로, 반드시 다른 초기화를 호출시켜야 한다.
이때 슈퍼 클래스의 생성자는 호출 시킬 순 없고, 같은 클래스 내에 있는 Convenience Initializers나 Designated Initializers를 호출 시켜야 한다.
최종적으론 같은 클래스 내의 Designated Initializers가 호출 되어야 한다.
class Person {
var name: String
var nickName: String
init(name: String, nickName: String) {
self.name = name
self.nickName = nickName
}
convenience init(name:String){//init(name: String, nickName: String) 호출
self.init(name: name, nickName: "unknown")
}
convenience init(){//convenience init(name:String) 호출
self.init(name: "unknow")
}
}

참고
개발자 소들