Comparación IF sobre el valor CGFloat – Xcode 7 da error

Tengo el siguiente código:

@property (nonatomic, assign) CGFloat floatValue; 

  if (floatValue) { //Do something } 

Desde Xcode 7: se produce un error del comstackdor:

La conversión implícita convierte el número de punto flotante en integer: 'CGFloat' a 'bool'

¿Alguien puede explicar qué es lo que va / sugieren ediciones de código para rectificar?

Depende de cómo se implementa el reparto de un CGFloat a un Bool. Esto podría depender de la implementación de Objective-C o incluso de la implementación del procesador real de la especificación de coma flotante IEEE.

De cualquier manera, definitivamente no debería confiar en eso. Sobre todo porque no se garantiza que los flotadores sean precisos. Podría terminar con algo increíblemente cercano a 0, pero fallará la instrucción if.

Debe probar explícitamente el flotador contra el valor que está buscando de la siguiente manera:

 if (floatValue != 0.0f) { //we know exactly what will happen } 

En Swift, el comstackdor ni siquiera te deja hacer algo como esto porque trata de mantenerte a salvo:

 if (floatValue) { //might happen, might not. who knows } 

En Swift, solo puede usar if (variable) syntax si la variable es de tipo Bool.

El comstackdor Objective-C no lo forzará a este comportamiento, pero debe cumplirlo si desea que su código funcione de manera pnetworkingecible y sea portátil.

floatValue preguntar explícitamente si floatValue es igual a 0.0, o, incluso mejor, si su valor absoluto es menor que algún épsilon aceptable (como 0.000001).

O eso, o simplemente truncar por coacción a NSInteger explícitamente, pero sería bastante tonto, ya que 0.9 terminaría como 0.

La conversión implícita convierte el número de punto flotante en integer: 'CGFloat' a 'bool'

También es importante mencionar que CGFloat aquí se está convirtiendo (al less intenta ser) a bool en lugar de BOOL. Eso es básicamente porque sucede algo en ARM64 (ver https://www.bignerdranch.com/blog/bools-sharp-corners/ ). Como dice la gente de arriba, es necesario compararse explícitamente con "el valor absoluto de cero". Sin embargo, eso no siempre significa comparar con 0.0f o 0.0 (ver esta publicación: https://stackoverflow.com/a/10334944/2799410 ). Por cierto, Matt acaba de señalar que la comparación de cero con una trampa es una mejor idea que simplemente comparar con 0.0 y / o 0.0f.