サブクラスとinit
にTVC
クラスをしようとしたとき、私は2つのエラーを取得しています:スウィフト3:のUITableViewControllerからの初期化のUITableViewController
class TVC: UITableViewController {
let vm: ViewModel
override init(style: UITableViewStyle){
super.init(style: style)
self.vm = ViewModel(tvc: self) // Error: Property `self.vm` not initialized at super.init call
}
override init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!){
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
// Error: Property `self.vm` not initialized at super.init call
}
}
エラー:オプション(VM VM作るの周りProperty self.vm not initialized at super.init call
作品: ViewModel?)は動作しますが、可能であれば、この方法をお勧めします。
私は間違っていますか?あなたは、VM lazy
lazy var vm: ViewModel = {
return ViewModel(tvc: self)
}()
作ることができます
.initを呼び出す前にすべてのletプロパティを初期化する必要がありますが、私の考えでは、ビューモデルはビューを知らないはずです。オブザーバーパターンを使用する必要があります。 – cescobaz