In Objective-c what is the difference between @YES/@NO and YES/NO? What types are used for each?
@YES is a short form of [NSNumber numberWithBool:YES]
&
@NO is a short form of [NSNumber numberWithBool:NO]
and if we write
if(@NO)
some statement;
the above if statement will execute since the above statement will be
if([NSNumber numberWithBool:NO] != nil)
and it's not equal to nil so it will be true and thus will pass.
Whereas YES and NO are simply BOOL's and they are defined as-
#define YES (BOOL)1
#define NO (BOOL)0
YES & NO is same as true & false, 1 & 0 respectively and you can use 1 & 0 instead of YES & NO, but as far as readability is concerned YES & NO will(should) be definitely preferred.
The difference is that by using @ you are creating an NSNumber instance, thus an object. Yes and No are simply primitive Boolean values not objects.
The @ is a literal a sort of shortcut to create an object you have it also in strings @"something", dictionaries @{"key": object}, arrays: @[object,...] and numbers: @0,@1...@345 or expressions @(3*2).
Is important to understand that when you have an object such as NSNumber you can't do basic math operations (in obj-c) such as add or multiply, first you need to go back to the primitive value using methods like: -integerValue, -boolValue, -floatValue etc.
You probably seen it because foundation collection types works only with objects, so if you need to put a series of bools inside an NSArray, you must convert it into object.
@YES/@NO is type of NSNumber,is used when do something with Foundation object.For example
NSMutableArray * array = [[NSMutableArray alloc] init];
[array addObject:@YES];//true
[array addObject:YES];//Wrong
YES/NO is BOOLs
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With