1

モデルがない場合は機能しない UITableViewController サブクラスがあります。モデルがない場合、ビューを表示する目的はありません。

だから私は考えています、私のモデルプロパティはオプションの値であってはなりません。こういう安心感が欲しい。だから私は自分のモデルを渡す便利な初期化を作成しようとしています。

let model:Client

override init() {
    super.init(style: UITableViewStyle.Plain)
}

convenience init(model:Client) {
    self.init()
    self.model = model
}

私の問題は、次のエラーが発生することです。

Property 'self.model' not initialised at super.init call

意味あり。init() が呼び出された場合、オプションではないプロパティによって要求されるため、プロパティは設定されません。

私はこれを克服しますか?

そのモデルは私の実際のモデルであることを覚えておいてください。ここでデフォルト値を設定しても意味がありません。また、探している安全性を無効にします。

ありがとうございました!

小さな注意:これを行うと、うまくいきません。とにかくモデルを設定するインスタンスはありません。

convenience init(model:Client) {
    self.model = model
    self.init()
}

編集:以下のアプローチは有望に思えた

let model: Client

required init(coder aDecoder: NSCoder) {
    preconditionFailure("Cannot initialize from coder")
}

init(model:Client) {
    self.model = model
    super.init(style: UITableViewStyle.Plain)
}

ただし、次のエラーが表示されます。

fatal error: use of unimplemented initializer 'init(nibName:bundle:)'

そして最後に、ここでの解決策は次のように呼び出すことでした:

super.init(nibName: nil, bundle: nil)
4

1 に答える 1

1

init()ここでオーバーライドする必要はなくinit(model:)、指定されたイニシャライザを作成する必要があります (便利ではありません)。あなたはこのようにすることができます

let model: Client

required init(coder aDecoder: NSCoder) {
    preconditionFailure("Cannot initialize from coder")
}

init(model:Client) {
    self.model = model
    super.init(style: UITableViewStyle.Plain)
}
于 2014-12-19T17:05:43.033 に答える