11

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クラスをサブクラス化しようとしたときに、同様の問題が発生しました

4

2 に答える 2