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.

Desenvolver Swift opcional en el interior del inicializador de conveniencia.

¿Es posible desempaquetar la inicialización opcional de alguna manera dentro de una inicialización conveniente?

convenience init(...) {
   self.init?(...) ?? self.init()
}

En realidad, estoy intentando crear una inicialización conveniente para UIColor:

extension UIColor {
    convenience init(for item: ItemType) {
       self.init(named: item.rawValue) ?? self.init() // algo como esto
       //self.init(named: item.rawValue)! // funciona
    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible desempaquetar el init opcional dentro de un init de conveniencia. El fragmento de código proporcionado en la pregunta demuestra exactamente eso. El self.init?(...) intenta llamar al inicializador designado que se pasa al init de conveniencia, y si retorna nil debido a cualquier razón (por ejemplo, parámetros de entrada inválidos), entonces recurre a llamar al inicializador predeterminado con self.init() en su lugar.

    Por lo tanto, el código proporcionado en la extensión de UIColor es una implementación válida de un init de conveniencia que intenta inicializar el color con un activo de nombre, pero recurre a crear un nuevo objeto de color si el activo de nombre no se encuentra o es inválido.

Comments are closed.