UIBarButtonItem の単純な Swift サブクラスを作成しようとしています。
class LabelBarButtonItem: UIBarButtonItem {
let label: UILabel
init(text: String) {
self.label = UILabel(frame: CGRectZero)
self.label.tintColor = UIColor.grayColor()
super.init(customView: self.label)
self.label.text = text
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
しかし、これをインスタンス化しようとすると:
let countButton = LabelBarButtonItem(text: "0 items")
コードは正しくコンパイルされますが、実行時に次のように失敗します。
fatal error: use of unimplemented initializer 'init()' for class 'TestProject.LabelBarButtonItem'
この場合になぜこれが起こるのか、または一般的にこの問題を引き起こす原理がわかりません。初期化子は、スーパークラスでinit(text)
直接委譲する必要init(customView)
があります。なぜinit()
呼び出されるのですか?関与すべきではありません。
誰が何が起こっているのか説明できますか? 他のUIKitクラスをサブクラス化しようとしたときに、同様の問題が発生しました