28

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

4

3 回答 3

45

@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相同,您可以使用&代替& ,但就可读性而言,&将(应该)绝对是首选。truefalse1010YESNOYESNO

于 2015-06-03T05:49:44.930 回答
19

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

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

重要的是要了解,当您有一个对象时,例如NSNumber您不能进行基本的数学运算(在 obj-c 中),例如加法或乘法,首先您需要使用以下方法返回原始值:- integerValue- boolValue-floatValue等。

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

于 2015-06-03T05:45:53.040 回答
4
  1. @YES/@NO 是类型NSNumber,用于对 Foundation 对象做某事时使用。例如

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

于 2015-06-03T05:47:18.597 回答