@YES/@NO 和 YES/NO 有什么区别?

What is the difference between @YES/@NO and YES/NO?

在Objective-c中@YES/@NOYES/NO有什么区别?每个使用什么类型?

不同之处在于,通过使用 @,您正在创建一个 NSNumber 实例,因此是一个对象。 YesNo 只是原始布尔值而不是对象。

@ 是一种创建对象的快捷方式,它也存在于字符串 @"something"、字典 @{"key": object}、数组:@[object,...] 和数字中: @0,@1...@345 或表达式 @(3*2).

理解这一点很重要,当你有一个像 NSNumber 这样的对象时,你不能进行基本的数学运算(在 obj-c 中),比如加法或乘法,首先你需要回到primitive 值使用如下方法:-integerValue-boolValue-floatValue

你可能见过它,因为基础集合类型只适用于对象,所以如果你需要在 NSArray 中放入一系列布尔值,你必须将它转换为对象。

  1. @YES/@NO 是 NSNumber 的类型,在使用 Foundation object.For 示例

    时使用
    NSMutableArray * array = [[NSMutableArray alloc] init];
    [array addObject:@YES];//true
    [array addObject:YES];//Wrong
    
  2. YES/NO 是 BOOLs

@YES[NSNumber numberWithBool:YES]

的缩写形式

&

@NO[NSNumber numberWithBool:NO]

的缩写形式

如果我们写

if(@NO)
   some statement;

上面的 if 语句将执行,因为上面的语句将是

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

它不等于 nil 所以它将是 true 因此会通过。

YESNO 只是 BOOL's 并且它们被定义为 -

#define YES             (BOOL)1

#define NO              (BOOL)0

YES & NO 分别与 true & false1 & 0 相同,您可以使用 1 & 0 而不是 YES & NO,但就可读性而言,YES & NO 绝对(应该)是首选。