티스토리 뷰
storyboard가 아닌 코드로 View를 구성할 때 required init 을 구현하라는 에러를 만나게 된다!
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
에러 fix 를 누르면 이러한 코드가 생긴다.
🤔 이 코드가 왜 필요하지?
우선, required init은
required: 필수의
뜻대로 필수 생성자이다.
자식클래스에서 반드시 구현해야하는 init이라 부모클래스에서 required init으로 설정.
UIView나 UIViewController의 경우에는 NSCoding이란 프로토콜을 채택하고 있는데
xml로 저장되어 있는 storyboard를 사용자의 화면으로 가져오기 위해서 init(coder: NSCoder) 이 사용된다
그래서 코드로 뷰를 구성할 때는 이 생성자가 불려지면 안 되기 때문에 FatalError를 터트린다.
🤔 Storyboard를 사용할 때는 왜 required init 쓰라는 오류가 안 뜨지?
우리가 따로 init을 작성하지 않으면 부모클래스의 생성자를 모두 상속받는다.
storyboard 로 뷰를 구성 할 땐 우리가 따로 init을 작성하지 않았기 때문에 부모클래스의 생성자를 모두 상속받았고, 그 중에 required init도 있어서 따로 작성하지 않아도 된다.
+
런타임 에러로 앱 죽는 것을 방지하기 위해
@available (*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@available (*, unavailable)를 사용하면 컴파일 시점에 에러가 발생하여 안전한 코드를 작성할 수 있다.
댓글