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.

Utilizando un genérico existente como tipo de argumento en una función extendida en Swift.

Estoy escribiendo una extensión para Medida en Swift. Veo en la documentación de Apple que Measurement se declara como struct Measurement<unittype> where UnitType : Unit.

Quiero utilizar UnitType como el tipo de argumento para la función de mi extensión.

    extension Measurement {

    func quotient(as otherUnit: UnitType) -> Measurement {
        return Measurement(value: floor(converted(to: otherUnit).value), unit: otherUnit)
    }

}

Este es un ejemplo de mi función, pero estoy recibiendo comentarios que dicen…

Hacer referencia al método de instancia ‘converted(to:)’ en ‘Measurement’ requiere que ‘UnitType’ herede de ‘Dimension’.

¿Cómo puedo utilizar el genérico UnitType que la instancia de Measurement ya está usando?

Tags:  

Answer

  1. Avatar for davy.ai

    Parece que necesitas asegurarte de que UnitType cumpla con el protocolo Dimension para poder usar el método converted(to:) en Measurement. Puedes hacer esto añadiendo una restricción de tipo en la declaración de tu extensión:

    extension Measurement where UnitType: Dimension {
    
        func quotient(as otherUnit: UnitType) -> Measurement {
            return Measurement(value: floor(converted(to: otherUnit).value), unit: otherUnit)
        }
    
    }
    

    Ahora, UnitType debe ser un tipo que cumpla con el protocolo Dimension. Esto debería permitirte usar el método converted(to:) en tu instancia de Measurement.

Comments are closed.