考虑以下具有委托的控制器类:
@objc protocol FooControllerDelegate {
}
@objc class FooController: UIViewController {
var delegate: FooControllerDelegate
init(delegate: FooControllerDelegate) {
self.delegate = delegate
super.init(nibName: nil, bundle: nil)
}
// TODO: How do we forbid this init?
required init(coder aDecoder: NSCoder) {
// TODO: Fails to compile.
super.init(coder: aDecoder)
}
}
有没有办法禁止使用-initWithCoder:
等效项,而不会隐式解包该委托,并在方法中放置assert(false)
?
理想情况下,根本不需要为每个子类编写init(coder:)
,并且隐式禁止它。
答案 0 :(得分:5)
覆盖方法必须是可访问的,因为它是封闭类型
init(coder:)
,请考虑convenience
关键字。 Swift的安全范例假定该类要么添加“额外的”init,要么必须修改所有必需的初始化程序的行为。答案 1 :(得分:0)