![](/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.