Swift: ¿Cómo prohibir un inicializador?

Considere la siguiente class de controller con un delegado:

@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? requinetworking init(coder aDecoder: NSCoder) { // TODO: Fails to compile. super.init(coder: aDecoder) } } 

¿Hay alguna forma de prohibir el uso de -initWithCoder: equivalente, sin hacer que el delegado se -initWithCoder: implícitamente, y colocando un assert(false) dentro del método?

Idealmente, no será necesario escribir el init(coder:) con cada subclass en absoluto, y tenerlo implícitamente prohibido.

  • Si el objective de prohibir el uso de todos los inicializadores designados además de los suyos, entonces no hay ninguna function de idioma en este momento. Esto se aplica a todo tipo de methods.

El método de anulación debe ser accesible ya que está encerrando el tipo

  • Si el objective es evitar la anulación vacía de init(coder:) cada vez que agregue un inicializador personalizado, piense en la palabra key de convenience . El paradigma de security de Swift asume que la class agrega init 'adicional' o tiene que modificar el comportamiento de todos los iniciadores requeridos.

"Herencia automática del inicializador"