我有這樣的UITableViewController子類:如何爲分組樣式創建指定的初始化UITableViewController?
class MyTableViewController: UITableViewController {
let foo: String
init(foo: String, style: UITableViewStyle = .Grouped) {
self.foo = foo
super.init(style: style)
}
required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }
}
沒什麼特別的,不幸的是預期,因爲super.init(style: style)
將調用MyTableViewController(nibName:bundle:)
這是行不通的。但是這並沒有在我的課堂上實現,所以應用程序會崩潰,出現fatal error: use of unimplemented initializer 'init(nibName:bundle:)' for class
錯誤。
很明顯,正確的方法是調用指定的初始化程序。不幸的是super.init(nibName: nil, bundle: nil)
會創建一個普通樣式的tableView。
我可以將let foo: String
轉換爲var foo: String!
,並將我的指定初始值設定項變爲便捷初始值設定項。像這樣:
class MyTableViewController: UITableViewController {
var foo: String!
convenience init(foo: String, style: UITableViewStyle = .Grouped) {
self.init(style: style)
self.foo = foo
}
}
哪個會起作用,但是它打敗了let
的目的。所以我不想這樣做。
我在做什麼錯?我需要做些什麼才能夠使用我自己的初始化程序?