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;
}
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;
}
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.
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
Sí, por eso el estilo de codificación normal evita comparar contra esas constantes, y solo las usa para la asignación. –
Deberías echar un vistazo a este artículo: http://weblog.bignerdranch.com/564-bools-sharp-corners/ –
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
No, no lo es. Un BOOL en Objective-C es un 'char firmado '. –
Mi "definición" fue un poco engañosa, la he modificado. –
Tu edición sigue siendo incorrecta. –
Hay un lanzamiento implícito: la última línea es efectivamente: 'return (BOOL) 56;'. –
Sabía que pedirías eso. – dan