2012-06-06 15 views
5

Sono nuovo di Objective-C e mi chiedo perché questo metodo viene compilato, qualcuno può spiegarmi perché?Objective-C: ritorno int al metodo BOOL

Grazie

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

C'è un cast implicito: l'ultima riga è effettivamente: 'return (BOOL) 56;'. –

+0

Sapevo che lo avresti chiesto. – dan

risposta

6

Un BOOL in Objective-C è un typedef di signed char. Poiché 56 si adatta a questo tipo, la conversione implicita da un valore letterale int non comporta alcuna perdita di dati.

+3

Zillan, inoltre, nota che questo potrebbe violare il codice se si basa su un valore 'YES' o' NO'. Per esempio. 'if ([self isEnabled] == YES]' fallirebbe mentre 'if ([self isEnabled])' funzionerebbe .. – Joe

+0

Sì, ecco perché il normale stile di codifica evita il confronto con quelle costanti e le usa solo per l'assegnazione. –

+3

Dovresti davvero dare un'occhiata a questo articolo: http://weblog.bignerdranch.com/564-bools-sharp-corners/ –

0

Si può pensare a una BOOL in Objective-C come

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

56 ritorna quindi vero, perché non è zero

+1

No, non lo è. Un BOOL in Objective-C è un 'char firmato '. –

+0

La mia "definizione" era un po 'fuorviante, l'ho modificata. –

+0

La tua modifica è ancora sbagliata. –