2015-06-03 15 views

risposta

31

@YES è una forma breve di [NSNumber numberWithBool:YES]

&

@NO è una forma abbreviata di [NSNumber numberWithBool:NO]

e se scriviamo

if(@NO) 
    some statement; 

quanto sopra if eseguirà dal momento che la dichiarazione di cui sopra sarà

if([NSNumber numberWithBool:NO] != nil) 

e non è uguale a nil quindi sarà true e così passerà.

Mentre YES e NO sono semplicemente BOOL's e sono definiti AS

#define YES    (BOOL)1 

#define NO    (BOOL)0 

YES & NO è stessa true & false, 1 & 0 rispettivamente ed è possibile utilizzare 1 & 0 invece di YES & NO , ma per quanto riguarda readabi l 'interesse è YES & NO (dovrebbe) essere decisamente preferito.

+0

Ho capito il tuo punto, ma ho provato lo stato 'BOOL = @YES;' che ha funzionato senza alcun avvertimento o errore. – Exploring

+0

@Exploring, 'BOOL a = 1.0 ;, BOOL aa = self; BOOL aaa = @ "abc"; 'tutte queste istruzioni funzioneranno anche, senza alcuna lamentela da parte del compilatore –

+4

Lo faranno, perché un incarico a BOOL per definizione della lingua controlla se l'elemento assegnato è diverso da zero o non nullo e assegna SÌ o NO. – gnasher729

13

La differenza è che utilizzando @ si sta creando un'istanza NSNumber, quindi un oggetto. Yes e No sono semplicemente valori booleani non primitivi.

Il @ è un letterale una sorta di scorciatoia per creare un oggetto lo avete anche nelle stringhe @"something", dizionari @{"key": object}, array: @[object,...] e numeri: @0,@[email protected] o espressioni @(3*2).

è importante capire che quando si dispone di un oggetto come NSNumber non si può fare operazioni matematiche di base (in obj-c), come aggiungere o moltiplicare, in primo luogo è necessario tornare al primitivo valore di utilizzando metodi come: - integerValue, -boolValue, -floatValue ecc

è probabilmente visto, perché i tipi di raccolta di fondazione funziona solo con gli oggetti, quindi se avete bisogno di mettere una serie di Caccio all'interno di un NSArray, devi convertirlo in oggetto.

+1

Questa è una risposta migliore rispetto alla risposta attualmente accettata. – KPM

+1

@ KPM, sì sono d'accordo, è meglio. –

4
  1. @ SI/NO @ è il tipo di NSNumber, viene utilizzato quando fare qualcosa con Fondazione oggetto Spazio esempio

    NSMutableArray * array = [[NSMutableArray alloc] init]; 
    [array addObject:@YES];//true 
    [array addObject:YES];//Wrong 
    
  2. SI/NO è BOOLs

+1

'SÌ' e' NO' sono 'BOOL's, non' Boolean's. –

Problemi correlati