块作为块的一部分

注射剂

我想知道是否有可能声明/传递block为another的参数block

让我通过代码和简单(不是真实的)用例进行说明:

  • 假设ViewControlleritems通过获取了对象列表ItemsAPI
  • ViewController 想在上面显示图钉 mapView

  • mapView销被轻触(选择):

    • MapView 显示项目应要求提供项目详细信息
    • 加载商品详细信息时,其内容将mapView更新为标注或其他内容

现在的代码:

// MapView.h

typedef void(^FetchItemCompletion)(id item);
typedef void(^ShouldFetchSingleItem)(NSInteger itemID, FetchItemCompletion(id item));


@interface MapView : MKMapView

- (void)pinItems:(NSArray *)items shouldFetchSingleItem:(ShouldFetchSingleItem)shouldFetchSingleItem;

@end

执行

- (void)pinItems:(NSArray *)items shouldFetchSingleItem:(ShouldFetchSingleItem)shouldFetchSingleItem {

    // For simplifying I'm using one method instead publishing mapViewDelegate and assigning blocks to self
    // 1) Pin items
    // 2) Some item seleceted - aka didSelectAnnotation
    // 3) We need to define WHAT WILL HAPPNED when we get item details
    FetchItemCompletion fetchItemCompletion = ^void(id item) {
        // update callout or whatever
    };

    // 4) Request for item details with fake id - 1
    shouldFetchSingleItem(1, fetchItemCompletion);
    // 5) ViewController should fetch item thorough API and then execute block (simply some mapView code)

}

这样ViewController就可以执行以下操作

[mapView pinItems:items shouldFetchSingleItem:^(NSInteger itemID, FetchItemCompletion fetchItemCompletion) {
        // request to API or whatever
        id item = ...
        fetchItemCompletion(item);
    }

遇到错误:

在此处输入图片说明

这可能会以某种方式发生吗,对此有什么存储策略?是否有任何瓶颈或任何其他可能的问题。

注意:对于原始问题的赞赏答案,而不是关于示例用例的答案

您的第二个typedef需要声明为

typedef void(^ShouldFetchSingleItem)(NSInteger itemID, FetchItemCompletion fetchItemCompletion);

在您对代码块进行类型定义后,无需重新声明该代码块将使用哪些参数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

高亮显示代码块的一部分

如何在接口块内指定模块变量作为伪参数声明的一部分?

VIM:在对称的代码块中交换字符串的一部分

WAVE文件扩展了fmt块的一部分

如何将Ruby数组拆分(块)为X元素的一部分?

用正则表达式动态替换条件块的一部分

闪亮的应用程序如何更新uiOutput块的一部分而不是整个块

拆分字符串并将分隔符保留为拆分字符串块的一部分,而不是作为单独的列表元素

缩短零件的一部分(基本上切出一块)

Promise 作为 redux 状态的一部分

使用变量作为语句的一部分

if 条件作为 GIT 命令的一部分

UiSegmentedControl作为UILabel子类的一部分

将标题作为CURL的一部分

如何为每个活动线程块处理重用的全局内存的唯一部分?

如何轻松找出是否以某种方式安装了块设备(或其一部分)

用Python中的BS4替换整个代码块(另一个块的HTML的一部分)

仅写入动态分配的存储块的一部分是否设置了整个块的有效类型?

为什么我们需要在 Anonymus 块的最后一部分 BEGIN END(执行部分)?

不能使用 HTML 重复同一部分,只显示 1 个代码块而忽略另一个

如何在Paw中将文件作为多部分请求的一部分上载?

Wordpress:是否可以在块编辑器样式表中将post-type用作css选择器的一部分?

静态方法/字段/块是元空间的一部分吗?元空间是否与堆分开并且在本机内存中?

为什么 jquery 代码块中的“return !1”会导致链接到页面另一部分的锚标记的 url 不会更改?

Classloader是JVM的一部分还是JRE的一部分?

取弦的一部分,并与另一部分

如何通过一个环境变量作为命令的一部分

保留数组的第一个元素作为序列的一部分

查找多个作为一个的一部分