使Objective-C实现块返回式

使Objective-C实现块返回式,objective-c,cocoa-touch,block,boolean,Objective C,Cocoa Touch,Block,Boolean,我有一些Obj-C代码,其中我有一个类,其中有许多块作为成员。 所涉财产如下: @property(nonatomic, readonly, retain) BOOL(^truthPredicate)(int, NSMutableDictionary*); 并在.m文件中的@synthesis语句中实现。在该类的一个init方法中,我尝试将属性设置为文字块: truthPredicate=^(int val, NSMutableDictionary* params) {return val &

我有一些Obj-C代码,其中我有一个类,其中有许多块作为成员。 所涉财产如下:

@property(nonatomic, readonly, retain) BOOL(^truthPredicate)(int, NSMutableDictionary*);
并在.m文件中的@synthesis语句中实现。在该类的一个init方法中,我尝试将属性设置为文字块:

truthPredicate=^(int val, NSMutableDictionary* params) {return val >= MANodeTruthThreshold ? YES : NO;};

这表示编译器出错。编译器,尽管YES和NO被定义为BOOL1和BOOL0,BOOL被定义为有符号字符,但编译器坚持认为我试图将int返回块分配给BOOL返回变量。如何让Obj-C意识到我返回的是布尔值,而不是整数?

显然,类型推断让你失望了。请尝试更详细的语法:

truthPredicate=^ BOOL (int val, NSMutableDictionary* params) {return val >= MANodeTruthThreshold ? YES : NO;};

显然,类型推断让你失望了。请尝试更详细的语法:

truthPredicate=^ BOOL (int val, NSMutableDictionary* params) {return val >= MANodeTruthThreshold ? YES : NO;};

非常感谢你。我在这件事上经历了很多困难,我不只是想做点什么。我知道有一个真正的解决办法。谢谢非常感谢你。我在这件事上经历了很多困难,我不只是想做点什么。我知道有一个真正的解决办法。谢谢LLVM/Clang存在一个已知问题,块上的字符宽度返回类型具有一些意外行为。你没疯@乔纳桑斯潘:谢谢。我刚开始用Obj-C在一段时间后用C++,所以它有点烦人,让编译器试图推断类型错误时,我可以告诉它。有一个已知的问题与LLVM/CLAN,其中字符宽度返回类型块有一些意想不到的行为。你没疯@乔纳桑斯潘:谢谢。我刚开始用Obj-C在一段时间后用C++,所以它有点烦人,让编译器试图推断类型错误时,我可以告诉它。