如何在swift中使用便捷初始化器设置非可选变量?

时间:2014-12-19 16:58:50

标签: swift initializer convenience-methods

我有一个UITableViewController子类,如果没有Model,它应该不起作用。如果没有模型,那么显示视图实际上没有任何意义。

所以我在思考,我的模型属性不应该是一个可选值。我想要这种安全感。所以我试图创建一个方便的init来传递我的模型。

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)

1 个答案:

答案 0 :(得分: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)
}