在Objective-c中,@YES
/ @NO
和YES
/ NO
之间的区别是什么?每种都使用什么类型?
答案 0 :(得分:39)
@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
将(应该)绝对是首选。
答案 1 :(得分:14)
不同之处在于使用@
创建了一个NSNumber
实例,因此是一个对象。 Yes
和No
只是原始布尔值而不是对象。
@
是一种文字的快捷方式,可以在字符串@"something"
,词典@{"key": object}
,数组@[object,...]
和数字中创建一个对象:@0,@1...@345
{1}}或表达式@(3*2)
。
重要的是要明白,当你有NSNumber
这样的对象时,你不能进行基本的数学运算(在obj-c中),例如加法或乘法,首先你需要回到原始值使用以下方法: - integerValue , -boolValue , -floatValue 等。
您可能已经看过它,因为基础集合类型仅适用于对象,因此如果您需要在NSArray
中放置一系列bool,则必须将其转换为对象。
答案 2 :(得分:4)
@ YES / @ NO是NSMutableArray * array = [[NSMutableArray alloc] init];
[array addObject:@YES];//true
[array addObject:YES];//Wrong
的类型,在使用Foundation对象时使用。例如
BOOLs
是/否是Code State Value
AK Alaska 201254
AL Alabama 52020
AR Arkansas 545041
AZ Arizona 630.63
CA California 623520