Necesito almacenar un valor como Float, pero los datos de origen son CGFloat:
let myFloat : Float = myRect.origin.x
pero esto da como resultado el error del compilador: 'NSNumber' no es del subtipo 'Float'
Entonces, si lo lanzo explícitamente así:
let myFloat : Float = myRect.origin.x as Float
pero esto a su vez da como resultado el error del compilador: 'No se puede convertir el tipo de expresión' Float 'a' Float ''
¿Cuál es la forma correcta de hacer esto y satisfacer al compilador, por favor?

Respuestas:
Puedes usar el
Float()inicializador:fuente
floatlugar deFloat, por lo que parece ese tipo / palabra clave en lugar de un nombre de variable.Si eres tan vago como yo, en un Extensions.swift defina lo siguiente:
Entonces puedes hacer:
fuente
Por lo general, la mejor solución es mantener el tipo y el uso
CGFloat, incluso en Swift. Eso es porqueCGFloattiene un tamaño diferente en máquinas de 32 bits y 64 bits.La palabra clave solo
asse puede utilizar para la conversión dinámica (para subclases), por ejemploSin embargo,
Double,Int,Floatetc no son subclases de uno al otro, por lo tanto, a "fundido" tiene que crear una nueva instancia, por ejemplo,fuente
aspara convertir un tipo genérico en un tipo concreto. Por ejemplo, si tenía una función que acepta un tipo genérico que se ajusta aBinaryInteger, puede convertirlo enIntusandoas?oas!.