UIView
, UIViewController
를 서브클래싱하는 코드를 작성하면서 init(frame:)
을 오버라이딩하는 코드를 작성하면, Xcode는 매번 init?(coder:)
가 정의되지 않았다는 컴파일 에러를 낸다. 일단 이 에러를 해결하려면 간단하게 부모 클래스의 이니셜라이저를 그대로 호출해주기만 하면 된다.
required override init?(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
왜 이 init?(coder:)
는 자동으로 상속이 안되는 것일까?
잠깐, 이니셜라이저 관련한 프로그래밍 가이드에서는 required 이니셜라이저는 서브클래스에서 오버라이딩할 때 override를 붙이지 않는다고 했는데? Xcode는 override를 붙여야 한다고 한다. 이 부분은 재확인이 필요하다.
(https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/TP40014097-CH18-ID203)
더 보기 »required 가 붙은 이니셜라이저