¿El init de conveniencia necesita tener el mismo número de parámetros que el init requerido?
De: https://docs.swift.org/swift-book/LanguageGuide/Initialization.html
Crea inicializadores de conveniencia siempre que un atajo a un patrón de inicialización común ahorre tiempo o haga más claro el propósito de la inicialización de la clase.
Según entiendo, convenience init
es básicamente un atajo para los parámetros de entrada “típicos”. La mayoría de las veces, el número de parámetros en convenience init()
es el mismo que en required init()
.
Por ejemplo:
public required init() {
super.init()
self.$timeStamp.owner = self
self.$position = self
self.$distance = self
}
public convenience init(timeStamp: FitTime? = nil,
position: Position? = nil,
distance: Measurement<UnitLength>? = nil {
self.init()
self.timeStamp = timeStamp
self.position = position
self.distance = distance
}
}
Creo que hay casos en los que convenience init
tendrá un menor número de parámetros en comparación con required init
, ya que se establecerán algunos valores predeterminados.
¿Creo que lo siguiente es válido? Hay un parámetro adicional en required init
pero no está presente en convenience init
. Sin embargo, en este caso, ¿cómo puedo acceder y pasar un valor al parámetro speed
?
public required init() {
super.init()
self.$timeStamp.owner = self
self.$position = self
self.$distance = self
self.$speed = self // SE AGREGÓ ESTO
}
public convenience init(timeStamp: FitTime? = nil,
position: Position? = nil,
distance: Measurement<UnitLength>? = nil {
self.init()
self.timeStamp = timeStamp
self.position = position
self.distance = distance
}
}
davy.ai
Sí, tu comprensión de la inicialización conveniente es correcta. Proporciona un atajo a los parámetros de entrada típicos y puede tener menos parámetros si se asignan valores predeterminados.
En cuanto al ejemplo que proporcionaste, parece que hay un parámetro adicional en la inicialización requerida en comparación con la inicialización conveniente. En este caso, puedes asignar un valor predeterminado al parámetro
speed
en la inicialización requerida y luego anular ese valor en la inicialización conveniente si es necesario. Alternativamente, también puedes crear una inicialización conveniente separada que incluya el parámetrospeed
.