我偶然发现了一个好奇的问题,返回类型为BOOL
。具有以下定义:在Objective-C块中遇到BOOL返回类型问题
typedef BOOL (^BoolBlock)(void);
...此代码将:
BoolBlock foo = ^{ return YES; };
...但是这无法编译:
BoolBlock bar = ^{ return YES || NO; };
,出现以下错误信息:
不兼容的块指针类型 初始化 'BoolBlock'(又名 'BOOL (^)(无效)')与类型的 '诠释(^)(无效)'
我可以使用显式转换解决问题的表达,但没有它,这不应该工作吗?有更好的解决方案吗?
那么为什么像' - (BOOL)foo {return YES ||没有; }'编译?换句话说,为什么区分大小写和[BOOL](http://stackoverflow.com/questions/541289)区分大小写而不是函数? – zoul 2011-05-09 09:00:14
@zoul:该函数有一个明确的返回类型,所以int将被隐式转换为BOOL。但是你创建的块没有明确的返回类型,所以它会从返回语句中推断出它的返回类型(这是块的特殊功能)。你返回一个int,所以它推断该块返回一个int。只有在块的类型被完全推断之后,编译器才会根据要分配的变量的类型检查该类型,以便获得类型不匹配。 – Chuck 2011-05-09 19:38:22