Подтвердить что ты не робот

В чем разница между @YES/@NO и YES/NO?

В Objective-c какая разница между @YES/@NO и YES/NO? Какие типы используются для каждого?

4b9b3361

Ответ 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