es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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
    }
}
Tags:  , ,

Answer

  1. Avatar for 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ámetro speed.

Comments are closed.