티스토리 뷰

카테고리 없음

required init

Chasomin 2024. 2. 4. 19:03

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)를 사용하면 컴파일 시점에 에러가 발생하여 안전한 코드를 작성할 수 있다.

 

 

댓글
최근에 올라온 글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함