В 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