В Objective-c какая разница между @YES/@NO и YES/NO? Какие типы используются для каждого?
В чем разница между @YES/@NO и YES/NO?
Ответ 1
@YES является короткой формой [NSNumber numberWithBool:YES]
&
@NO является короткой формой [NSNumber numberWithBool:NO]
и если мы пишем
if(@NO)
some statement;
приведенный выше оператор if будет выполняться, так как указанный выше оператор будет
if([NSNumber numberWithBool:NO] != nil)
и он не равен nil, поэтому он будет true и, таким образом, пройдет.
В то время как YES и NO являются просто BOOL's, и они определяются как -
#define YES (BOOL)1
#define NO (BOOL)0
YES и NO совпадают с true и false, 1 и 0 соответственно, и вы можете использовать 1 и 0 вместо YES и NO, но в отношении удобочитаемости YES и NO будет (должно) быть определенно предпочтительным.
Ответ 2
Разница в том, что с помощью @ вы создаете экземпляр NSNumber, таким образом, объект. Yes и No являются просто примитивными булевыми значениями, а не объектами.
@ - это буквальный вид ярлыка для создания объекта, который у вас есть и в строках @"something", словарей @{"key": object}, массивов: @[object,...] и чисел: @0,@[email protected] или выражений @(3*2).
Важно понимать, что когда у вас есть такой объект, как NSNumber, вы не можете выполнять основные математические операции (в obj-c), такие как добавление или умножение, сначала вам нужно вернуться к примитиву , используя следующие методы: - integerValue, -boolValue, -floatValue и т.д.
Вероятно, вы видели это, потому что типы коллекций фондов работают только с объектами, поэтому, если вам нужно поставить серию bools внутри NSArray, вы должны преобразовать ее в объект.
Ответ 3
-
@YES/@NO - тип
NSNumber, используется, когда что-то делает с объектом Foundation. НапримерNSMutableArray * array = [[NSMutableArray alloc] init]; [array addObject:@YES];//true [array addObject:YES];//Wrong -
ДА/НЕТ
BOOLs