在另一个块内执行块

时间:2015-01-20 07:24:44

标签: ios objective-c objective-c-blocks

定义:

NSDictionary * (^blockThatReturnsADict)(void)

实现:

blockThatReturnsADict block = ^NSDictionary *(void) {

    [SomeClass fetchADictionaryForKey:@"key" onSuccess:^(NSDictionary* dict) {
        //how do i return dict from here?
    }];

}

这是一个重新考虑设计符合逻辑的用例吗?

更新

'fetchADictionaryForKey'块是异步的。所以我想我不能只声明一个块变量,然后返回它。

2 个答案:

答案 0 :(得分:2)

您遇到了期货和承诺会解决的标准问题类别,因此您有两个高级选项:

1)假设您需要大量的顺序异步块,采用promise库或框架并在任何地方使用promises。

OR

2)如果你没有那么多,那么使用iOS通常使用的相同机制:成功回调。

对于你的情况,简单的出路可能是#2。传入成功块(而不是void),然后在内部块中调用带有结果的成功块。

答案 1 :(得分:0)

你不会从异步块返回结果(因为你显然不能)。异步块将结果设置在适当的位置。例如,您的对象可能具有属性resultDict,而回调只是说

self.resultDict = dict;