tipo puede operandos operador aplicar cocoa swift cgfloat

cocoa - el operador== no se puede aplicar a operandos del tipo object y int



¿El operador binario ''+'' no se puede aplicar a dos operandos CGFloat? (3)

Codificando en Swift y obtenemos el error anterior ...

¿El mensaje está enmascarando otra cosa O realmente no puedes agregar dos operandos CGFloat? Si no, ¿por qué (en la tierra) no?

EDITAR

No hay nada especial en el código que estoy tratando de hacer; lo que es interesante es que el mensaje de error anterior, VERBATIM, es lo que me dice el compilador del Asistente Swift (subrayando mi código con líneas onduladas rojas).

Ejecutando Xcode 6.3 (Swift 1.2)


Es absolutamente posible, agregando dos variables CGFloat usando el operador binario ''+''. Lo que necesita saber es que la variable resultante también es una variable CGFloat (basada en el principio de inferencia de tipo).

let value1 : CGFloat = 12.0 let value2 : CGFloat = 13.0 let value3 = value1 + value2 println("value3 /(value3)") //The result is value3 25.0, and the value3 is of type CGFloat.

EDITAR: Por convención Swift v3.0

let value = CGFloat(12.0) + CGFloat(13.0) println("value /(value)") //The result is value 25.0, and the value is of type CGFloat.


Me encontré con este código de aspecto inocente:

func foo(line: CTLine) { let ascent: CGFloat let descent: CGFloat let leading: CGFloat let fWidth = Float(CTLineGetTypographicBounds(line, &ascent, &descent, &leading)) let height = ceilf(ascent + descent) // ~~~~~~ ^ ~~~~~~~ }

Y encontró la solución expandiendo el error en el navegador de problemas:

Al examinarlo, creo que Swift encontró la función +(lhs: Float, rhs: Float) -> Float primero en función de su tipo de retorno ( ceilf toma un Float ). Obviamente, esto toma Float s, no CGFloat s, que CGFloat luz sobre el significado del mensaje de error. Por lo tanto, para forzarlo a usar el operador correcto, debes usar una función de envoltura que tome un Double o un Float (o simplemente un CGFloat , obviamente). Así que intenté esto y el error fue solucionado:

// ... let height = ceilf(Float(ascent + descent)) // ...

Otro enfoque sería utilizar una función que tome un Double o CGFloat :

// ... let height = ceil(ascent + descent) // ...

Entonces, el problema es que el compilador prioriza los tipos de retorno sobre los tipos de parámetros. Me alegra ver que esto todavía está sucediendo en Swift 3; P


Principalmente dos posibles razones son responsables de que ocurra tal tipo de error.

primero:

Siempre que intente comparar el tipo opcional de variable CGFloat como

if a? >= b? { videoSize = size; }

Esto es responsable de un error, por lo tanto, hágalo como if a! >= b!{} if a! >= b!{}

Segundo: cada vez que dirija el valor de uso para obtener un resultado en ese momento, se produce un error de este tipo

me gusta

var result = 1.5 / 1.2

No utilice como arriba.
usar con el objeto que se declara como CGFloat

me gusta

var a : CGFloat = 1.5 var b : CGFloat = 1.2 var result : CGFloat! result = a / b