![](/img/trans.png)
[英]Swift: How to initialise a let constant in a UIViewController subclass
[英]How to subclass a UIViewController and add properties in swift?
我想在Swift中创建一种新型的视图控制器,该控制器具有必须显式初始化的其他属性。 该属性为nil或具有默认值没有任何意义,并且该控制器将仅通过编程方式进行初始化。 我试图这样定义它:
class MyController : UIViewController {
var prop: Int
init(prop: Int) {
self.prop = prop
super.init()
}
required init(coder aDecoder: NSCoder?) {
fatalError("don't serialize this")
}
}
我尝试运行此程序,但由于super.init()
尝试运行未定义的nib构造函数而导致崩溃,因此我尝试添加该函数:
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
但是现在编译器抱怨prop
没有被初始化。 这是我的问题: 如何在此处正确初始化prop
? 我不需要默认值,并且我设置的任何内容都将覆盖在其他初始化程序中设置的正确值。
我通过在笔尖初始化中设置一些默认值来破解它,但是随后让我的第一个初始化执行此操作
self.prop = prop
super.init()
self.prop = prop
但是除了真正的怪异和丑陋之外,这令我担心,现在可以从笔尖初始化视图控制器并最终得到默认值了,这很糟糕。
在Swift中执行此操作的正确且惯用的方法是什么?
在某个时候,必须通过调用init(nibName:bundle:)
或init(coder:)
初始化视图控制器。
尝试这个:
class MyViewController: UIViewController {
var prop: Int
init(prop: Int, nibName nibNameOrNil: String? = nil, bundle nibBundleOrNil: Bundle? = nil) {
self.prop = prop
super.init(nibName:nibNameOrNil, bundle: nibBundleOrNil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
尝试以下
class MyController: UIViewController {
var prop: Int
required init?(coder aDecoder: NSCoder) {
fatalError()
}
init(prop: Int) {
self.prop = prop
super.init(nibName: nil, bundle: nil)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.