【发布时间】:2015-05-31 17:19:16
【问题描述】:
我写了一个可以与点符号一起使用的方法,使用块技巧
- (RaginiDBQuery *(^)(id object))where;
可以使用点表示法调用此方法,因为它基本上不接收任何参数,(它确实接收,但使用返回的块)
所以我可以这样称呼它:
query.where(object)
我需要它而不是获得id object 我想在这种方法中收到类似的东西:
- (NSEnumerator *)where:(BOOL (^)(id object))predicate;
这个方法可以这样调用:
[object where:^(id a){return [a intValue]%2 == 1}];
我想要将两者结合起来,使用点符号调用我的方法where,但是像上面的示例一样向它发送一个谓词块,我尝试了这个:
- (RaginiDBQuery *(^)(BOOL (^)(id object))where;
但这给了我错误,所以问题是这样的:
我如何声明一个块,它需要一个块?
编辑:
对于任何在下面寻找答案检查的人,但这里是 tl;dr
- (RaginiDBQuery *(^)(BOOL(^filterBlock)(id object)))where;
【问题讨论】:
-
我认为你只需要更多的括号:
- (NSObject *(^)(BOOL(^)(id))) where对你有用吗?例如,将通过self.where(^BOOL(id obj) {return false;});调用 -
@luk2302 就像一个魅力!谢谢。
-
事实上我认为你的整个错误只是缺少一个右括号!?
-
是的,确实如此!有时我会犯愚蠢的错误。
-
我补充说,作为最终未来读者的答案。
标签: ios objective-c cocoa-touch objective-c-blocks