当使用显式块返回类型否定时,为什么BOOL变为int

时间:2014-05-06 09:26:49

标签: objective-c

为什么BOOLtypedef signed char,在被否定时转换为int

// Doesn't compile.
NSInteger occurrences = [[contactCountries indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) {
    return ![obj isEqualIgnoringCase:@"astring"];
}] count];

错误:

  当块文字具有未指定的显式返回类型时,

返回类型'int'必须匹配先前的返回类型'BOOL'(又名'signed char')

1 个答案:

答案 0 :(得分:1)

这是由于Objective-C中的“C”。 C99对!运营商(强调我的)说了这个:

6.5.3.3一元算术运算符,第5段:

  

逻辑否定运算符的结果!如果其操作数的值比较不等于0,则为0;如果其操作数的值等于0,则为1. 结果的类型为int。表达式!E等效于(0 == E )。

简单地施展它:

return (BOOL)![obj isEqualIgnoringCase:@"astring"];