Che cos'è condition
? È un BOOL
o un NSNumber
?
Se condition
è un BOOL
, allora non si desidera utilizzare o @NO
@YES
affatto.Si vuole dire
if (condition) // test if condition is true
if (!condition) // test if condition is false
if (condition == NO) // same as previous, based on personal preference
Si noti che non si dovrebbe mai dire
if (condition == YES)
perché BOOL
non è in realtà limitato a 0
e 1
come valori, può contenere qualsiasi cosa in char
, quindi se condition
tiene accidentalmente , per esempio, 3
, quindi if (condition)
e if (condition == YES)
si comporterebbero in modo diverso.
Se condition
è un NSNumber
, allora ancora non si desidera utilizzare @NO
e @YES
. Hai voglia di convertirlo in un BOOL
utilizzando -boolValue
, come in
if ([condition boolValue]) // test if condition is true
if (![condition boolValue]) // test if condition is false
if ([condition boolValue] == NO) // same as previous, based on personal preference
L'asporto di base è, non utilizzare @NO
e @YES
letterali per i confronti. È inutile e inelegante, dal momento che tutto ciò che potresti fare con loro è convertirli nuovamente in BOOL
s.
fonte
2013-03-25 03:30:22
Nota che! Condizione e condizione == NO sono ** non ** uguali. C'è un caso limite. Diciamo che la condizione è 256. Questo sarebbe overflow in 0 e uguale a 'NO' poiché è semplicemente un carattere firmato. Tuttavia, l'operatore '!' Restituisce un valore booleano C, che viene definito esplicitamente dallo standard C per essere vero per tutti i valori diversi da zero. Quindi 'BOOL' sarebbe' NO' e 'bool' sarebbe' true' – borrrden
Non importa su questo, l'esempio sopra sembra funzionare da solo. Il caso che mi ha morso è leggermente diverso. Per alcuni casi di BOOL (vale a dire l'overflow a 8 bit) (flag) e (flag == NO) saranno entrambi falsi. – borrrden
È inoltre possibile utilizzare la notazione Objective-C 2.0 per gli accessor per boolValue – HAS