考虑以下带有委托(delegate)的 Controller 类:

@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:,而不必使委托(delegate)隐式地展开,并且在方法中放置一个assert(false)

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

最佳答案

  • 如果目标是禁止使用除您之外的所有指定的初始化程序,则此刻没有语言功能。这适用于所有方法。


  • 如果目标是每次添加自定义初始化程序时避免空重写init(coder:),请考虑使用convenience关键字。 Swift的安全范例假定该类要么添加了“其他” init,要么必须修改所有必需的初始化程序的行为。

  • "Automatic Initializer Inheritance"

    关于ios - Swift-如何禁止初始化程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28644505/

    10-12 00:18
    查看更多