필수 생성자로, 슈퍼 클래스에서 정의해둘 경우
서브 클래스가 슈퍼 클래스의 생성자를 상속받지 않는 한 서브클래스에서 반드시 구현해주어야 합니다
⇒ required init은 서브 클래스에서 "지정 생성자를 직접 구현"했을 경우에 필수적이구나! override 키워드 없이 구현!
class SoptMember {
var name: String
var part: String
func sayHello() {
print("안녕 \\(part)파트 \\(name)아? 솝트는 처음이지?")
}
// 모든 프로퍼티를 초기화 하는 생성자
required init(name: String, part: String) {
self.name = name
self.part = part
}
}
class PartLeader: SoptMember {
var alias: String
init(alias: String) {
self.alias = alias
super.init(name: "희재", part: "아요")
}
required init(name: String, part: String) {
fatalError("init(name:part:) has not been implemented")
}
}
우리는 UIView / UIViewController를 상속받아 커스텀 클래스를 만들 때, 아래와 같은 코드를 많이 접했다..
왜 이런 코드를 필수로 써줘야 되는걸까?
그 이유는 바로 UIView / UIViewController가 NSCoding 프로토콜
을 채택하기 때문이다!
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
우리가 코드로 화면을 구성할 수도 있지만, storyboard나 xib를 이용해서 View를 구성할 때도 있다. (난 없다) 그때 그 storyboard나 xib는 우리가 만들어둔 UI의 형태를 xml 형태로 저장하고 있는데, 이 저장된 형태를 우리의 화면으로 가져오기 위해서는 이 xml형태로 저장된 파일의 구성을 가져와야 하는데,
**이 구성을 가져올 때 사용되는 것이 바로 init(coder: NSCoder)**란 것임!!!
but. xib / storyboard 말고 코드로 직접 뷰를 생성하고 싶은데요?! ⇒ 새로 지정 생성자를 직접 구현한다는 것 자체가 부모의 생성자를 상속받지 않는단 것이기 때문에
이땐 required init(coder: NSCoder)을 직접 구현해주어야 하는 것임
또 but. fatal error인 이유는,