为什么BOOL
,typedef 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')
答案 0 :(得分:1)
这是由于Objective-C中的“C”。 C99对!
运营商(强调我的)说了这个:
6.5.3.3一元算术运算符,第5段:
逻辑否定运算符的结果!如果其操作数的值比较不等于0,则为0;如果其操作数的值等于0,则为1. 结果的类型为int。表达式!E等效于(0 == E )。
简单地施展它:
return (BOOL)![obj isEqualIgnoringCase:@"astring"];