ios - 返回 block 的方法

标签 ios objective-c cocoa-touch objective-c-blocks

我使用 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/

相关文章:

ios - 如何在我的 iOS 应用程序之间传递对象/数据

ios - 无法填充第二个 UITableView Controller

ios - 如何清除/清零用于通过串行端口接收字符的 NSMutableString?

cocoa-touch - UIScrollView - 减速时捕捉控制

ios - iPhone - 沿触摸和拖动路径移动对象

ios - 只登录调试器,但报告中没有数据

ios - Swift:UIBezierPath bezierPathByReversingPath() 问题

ios - uitoolbar 的图标/文本类似于 uitabbar

ios - 如果在横向模式下 iOS 无法正常工作,则设置框架

iphone - MonoTouch 是否需要 Mac 才能发布到 iPhone/iPod Touch?