objective eureka community ios swift initialization subclass nsobject

ios - community - eureka swift 4



Subclasificación de NSObject en Swift-Mejor práctica con inicializadores (3)

En complemento a las respuestas, una buena idea es llamar a super.init () antes de otras declaraciones. Creo que es un requisito más fuerte en Swift porque las asignaciones son implícitas.

Aquí está el diseño de un ejemplo de clase. ¿Puede alguien guiarme sobre qué es una mejor práctica al crear una subclase de NSObject?

class MyClass: NSObject { var someProperty: NSString! = nil override init() { self.someProperty = "John" super.init() } init(fromString string: NSString) { self.someProperty = string super.init() } }

¿Es correcto, estoy siguiendo las mejores prácticas aquí?

Me pregunto si estoy configurando correctamente los inicializadores (uno que establece la secuencia a un valor predeterminado, y que puedo pasar en una cadena)?

¿Debería llamar a super.init() al final de cada uno de los inicializadores?

Si mi iniciador más específico (el que toma una cadena) simplemente llama a self.init() al final en lugar de a super.init() ?

¿Cuál es la forma correcta de configurar los inicializadores en Swift cuando se subclasifica NSObject ? - ¿y cómo debería llamar al superinicio?

Esta pregunta (aunque en Objective C) sugiere que debe tener un init, que siempre llama y simplemente establece las propiedades en inits más específicos: Objective-C Multiple Initialisers


No soy Swift ninja pero escribiría MyClass como:

class MyClass: NSObject { var someProperty: NSString // no need (!). It will be initialised from controller init(fromString string: NSString) { self.someProperty = string super.init() } convenience override init() { self.init(fromString:"John") // calls above mentioned controller with default name } }

Ver la sección de inicialización de la documentación


Si alguna propiedad puede ser nula, entonces creo que quiere definir la propiedad como:

var someProperty: NSString?

Esto también elimina la necesidad de un inicializador personalizado (al menos, para esta propiedad), ya que la propiedad no requiere un valor en el momento de la inicialización.