我偶然发现了 block 中 BOOL
返回类型的一个奇怪问题。具有以下定义:
typedef BOOL (^BoolBlock)(void);
...此代码通过:
BoolBlock foo = ^{ return YES; };
...但是编译失败:
BoolBlock bar = ^{ return YES || NO; };
错误信息如下:
Incompatible block pointer types initializing 'BoolBlock' (aka 'BOOL (^)(void)') with an expression of type 'int (^)(void)'
我可以使用显式强制转换来解决这个问题,但是没有它就不能工作吗?有更好的解决方案吗?
最佳答案
||正如 Chuck 所说,运算符返回 int 类型。
BoolBlock bar = ^{ return (BOOL)(YES || NO); };
或
BoolBlock bar = ^BOOL (void){ return YES || NO; };
BoolBlock bar = ^BOOL (){ return YES || NO; }; // warns in gcc, ok with clang
关于objective-c - 在 Objective-C block 中遇到 BOOL 返回类型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5934387/