gpt4 book ai didi

swift - 如何在 swift 中使用便利初始化程序设置非可选变量?

转载 作者:行者123 更新时间:2023-11-28 07:13:15 25 4
gpt4 key购买 nike

我有一个 UITableViewController 子类,如果没有模型,它就不能工作。如果没有模型,那么显示 View 就没有任何意义。

所以我在想,我的模型属性不应该是可选值。我想要这样的安全感。所以我正在尝试创建一个方便的 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)

最佳答案

您不需要在这里重写 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)
}

关于swift - 如何在 swift 中使用便利初始化程序设置非可选变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27570562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com