我有这样的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
的目的。所以我不想这样做。
我在做什么错?我需要做些什么才能够使用我自己的初始化程序?