疑問
UIView
を拡張して、
class CustomView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
func commonInit() {
}
}
こういうViewを作って、CustomView()
と引数なしの初期化を行うと、override init(frame: CGRect)
で定義したイニシャライザが呼ばれ、commonInit()
も期待通りに呼ばれるのはなぜだろうと、ふと疑問に思った。
検証
UIView
がconvenience initializerを持っていると考えると説明がつく。
class UIViewLike {
init(frame: CGRect) {
print("UIViewLike initialized")
}
convenience init() {
self.init(frame: .zero)
}
}
class CustomViewLike: UIViewLike {
override init(frame: CGRect) {
super.init(frame: frame)
print("CustomViewLike initialized")
}
}
これらを定義して、
let hoge = CustomViewLike()
と引数なしのイニシャライザを呼んでやると、
UIViewLike initialized
CustomViewLike initialized
とログに表示される。