2012-06-06 14 views
5

Soy nuevo en Objective-C y me pregunto por qué compila este método, ¿alguien puede explicarme por qué?Objective-C: Volviendo al método BOOL

Gracias

-(BOOL) isEnabled{ 
    return 56; 
} 
+2

Hay un lanzamiento implícito: la última línea es efectivamente: 'return (BOOL) 56;'. –

+0

Sabía que pedirías eso. – dan

Respuesta

6

Un BOOL en Objective-C es un typedef de signed char. Como 56 cabe en ese tipo, la conversión implícita de un literal int no ocasiona pérdida de datos.

+3

Zillan, también tenga en cuenta que esto puede romper el código si se basa en un valor 'SÍ' o 'NO'. P.ej. 'if ([self isEnabled] == YES]' fallaría mientras 'if ([self isEnabled])' funcionaría. – Joe

+0

Sí, por eso el estilo de codificación normal evita comparar contra esas constantes, y solo las usa para la asignación. –

+3

Deberías echar un vistazo a este artículo: http://weblog.bignerdranch.com/564-bools-sharp-corners/ –

0

Se puede pensar en un BOOL en Objective-C como

false === 0 === nil //Anything that is zero or nil is false 
true = !false   //Anything that is NOT zero or nil is true. 

56, por lo tanto devuelve verdadero, ya que no es cero

+1

No, no lo es. Un BOOL en Objective-C es un 'char firmado '. –

+0

Mi "definición" fue un poco engañosa, la he modificado. –

+0

Tu edición sigue siendo incorrecta. –

Cuestiones relacionadas