我使用 block 技巧编写了一个可以与点表示法一起使用的方法
- (RaginiDBQuery *(^)(id 对象))where;
可以使用点表示法调用此方法,因为它基本上不接收任何参数(确实如此,但使用返回的 block )
所以我可以这样调用它:
query.where(对象)
我需要什么而不是获取 id 对象
我想收到类似此方法的内容:
- (NSEnumerator *)where:(BOOL (^)(id object))谓词;
这个方法可以这样调用:
[object where:^(id a){return [a intValue]%2 == 1}];
我想要的是将两者结合起来,使用点符号调用我的方法where
,但向其发送一个谓词 block ,如上面的示例所示,我尝试了以下操作:
- (RaginiDBQuery *(^)(BOOL (^)(id 对象))where;
但这给了我错误,所以问题是这样的:
如何声明一个需要 block 的 block ?
编辑:
对于任何寻找答案的人,请检查下面,但这里是 tl;dr
- (RaginiDBQuery *(^)(BOOL(^filterBlock)(id object)))where;
最佳答案
唯一的错误基本上是缺少右括号。正确的方法应该写成:
- (RaginiDBQuery *(^)(BOOL(^)(id))) where;
稍后可以通过调用
self.where(^BOOL(id obj) {return [obj intValue] % 2 == 1;});
为了便于阅读,强烈建议按照 rob 建议使用 typedef,否则很难理解传入的内容以及从函数返回的内容。
关于ios - 返回 block 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30560280/