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

cdu*_*dub 23 boolean objective-c objective-c-literals

在Objective-c中,@YES/ @NOYES/ 之间有什么区别NO?每种都使用什么类型?

San*_*ani 39

@YES 是一种简短的形式 [NSNumber numberWithBool:YES]

&

@NO 是一种简短的形式 [NSNumber numberWithBool:NO]

如果我们写

if(@NO)
   some statement;
Run Code Online (Sandbox Code Playgroud)

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

if([NSNumber numberWithBool:NO] != nil)
Run Code Online (Sandbox Code Playgroud)

并且它不等于nil它将会如此true并因此将通过.

鉴于YES而且NO简单BOOL's而且它们被定义为 -

#define YES             (BOOL)1

#define NO              (BOOL)0
Run Code Online (Sandbox Code Playgroud)

YES&NO是一样的true&false,1&0分别可以使用1&0代替YES&NO,但就可读性而言YES:NO将(应该)肯定是首选.

  • 它们将是,因为根据语言的定义对BOOL的赋值检查分配的项是非零还是非零,并分配YES或NO. (4认同)

And*_*rea 16

不同之处在于,通过使用@您创建一个NSNumber实例,从而创建一个对象.Yes并且No只是原始布尔值而不是对象.

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

重要的是要明白,当你有一个对象,比如NSNumber你不能做基本的数学运算(在obj-c中),比如add或multiply,首先你需要使用如下方法回到原始值: - integerValue,- boolValue,-floatValue

您可能已经看过它,因为基础集合类型仅适用于对象,因此如果您需要在其中放置一系列bool NSArray,则必须将其转换为对象.