objective-c - 在 Objective-C block 中遇到 BOOL 返回类型问题

标签 objective-c objective-c-blocks

我偶然发现了 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/

相关文章:

objective-c - 持久存储迁移失败缺少源托管对象模型

objective-c - 关于 Google 文档文档更新的推送通知

没有完成 block 的 iOS 同步动画

objective-c - 将 block 传递给异步方法

objective-c - UITabBar 自定义未按预期工作

objective-c - 在 Objective-C 中创建一个整数属性数组

ios - Objective C - 从另一个类调用方法

ios - 禁用 iPad 的 UI 交互,直到数据在后端的主线程上下载

ios - block 可能会导致保留周期

ios - 如果 PFQuery 已经在运行,则忽略获取