swift nscoding designated-initializer

swift - Añadiendo NSCoding como una extensión



designated-initializer (1)

Como dice la documentación, las extensiones no pueden agregar nuevos inicializadores designados. ¿Qué pasa si hay propiedades privadas que necesitan inicialización? Sería imposible inicializar correctamente el tipo. Puede agregar inicializadores convenientes en una extensión porque, por su naturaleza, deben llamar a un inicializador designado.

Además, se especifica que init (coder aDecoder: NSCoder) es un inicializador designado porque es una ruta completamente diferente para crear una instancia. Tome UIViewController, por ejemplo, puede crearse utilizando un código plano o puede crearse desde un archivo XIB.

Al final, no es posible agregar una extensión que implemente NSCoding.

Quizás pueda crear una clase contenedora que contenga esta clase y hacer que implemente NSCoding.

Me gustaría extender una clase de marco ( no quiero editar el código fuente directamente ) y hacer que se ajuste a NSCoding .

Básicamente, aquí hay una simplificación de la situación en la que estoy:

/* Can''t be edited. */ class Car: NSObject { var color: String? } /* Can be edited */ extension Car: NSCoding { init(coder aDecoder: NSCoder) { } func encodeWithCoder(aCoder: NSCoder) { } }

El problema es init(coder aDecoder: NSCoder) es, según el archivo de encabezado, un designated initializer ( ¿no es esto extraño? ¿No debería ser un convenience initializer ? ). Sin embargo, la documentation dice que la extensión no puede agregar un nuevo inicializador designado.

Mi inglés no es perfecto y tal vez me perdí algo ... ¿O es realmente imposible?