iOS | required init?(coder: NSCoder)

일어나 개발해야지·2023년 9월 4일

필수생성자(Required init)

규칙 : 지정생성자를 구현하면, 부모클래스의 필수생성자 또한 구현해줘야한다

import UIKit



class CustomCell : UITableViewCell{
    
    
    //customCell을 만들때 작성하는 형식으로, 초기화 과정을 다루고 있음
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
    //셀의 스타일과, 재사용 식별자를 매개변수로 받고 있음.
        super.init(style: style, reuseIdentifier: reuseIdentifier)
    }
    
    required init?(coder: NSCoder) {
          super.init(coder: coder)
    }

}

Intro

CustomCell을 만들려 setting을 시작했다.
required init 은 어떤 역할을 하는지 궁금해졌다.

먼저, required init이 없는 상태에서 build를 해보면.
필수 항목이라는 에러와 함께 다음 코드를 제안해준다.

Error
'required' initializer 'init(coder:)' must be provided by subclass of 'UITableViewCell'

제안코드 1

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

위 코드는 스토리보드나 XIB에서 셀을 초기화 하지않도록 강제하는 코드이며,
셀의 인스턴스를 생성할때, Inteface Builder를 사용하지 않을 것이라고 확신하는 경우
즉, 코드로 UI를 작업한 경우에 사용이 가능하다.

셀을 초기화 : 인스턴스를 생성하고 UI를 설정한다.
Inteface Builder : GUI로 UI를 편집할 수 있는 편집기,
iOS 개발에서는 스토리보드를 의미한다.

제안코드 2

required init?(coder: NSCoder) {
    super.init(coder: coder)
}

2번 코드는 반대로 super.init를 호출하여, 스토리보드에서 셀을 초기화 할 수 있도록하는 코드이다.

슈퍼클래스의 요구사항을 적절하게 충족시키려면 2번 코드를 호출하는게 적합하다.

0개의 댓글