Swift - 如何禁止初始化程序?

Sea*_*bet 4 xcode uiviewcontroller ios swift

考虑以下具有委托的控制器类:

@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) 
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有任何方法禁止使用-initWithCoder:等效项,而不会使委托隐式解包,并assert(false)在方法中放置?

理想情况下,根本不需要编写init(coder:)每个子类,并且隐式禁止它.

sun*_*ows 5

  • 如果禁止使用除您之外的所有指定初始值设定项的目标,则此时此时没有语言功能.这适用于各种方法.

覆盖方法必须是可访问的,因为它是封闭类型

  • 如果目标是init(coder:)每次添加自定义初始化程序时避免空置覆盖,那么请考虑convenience关键字.Swift的安全范例假定该类要么添加"额外的"init,要么必须修改所有必需的初始化程序的行为.

"自动初始化程序继承"