在另一个块中执行块

Executing block inside another block

定义:

NSDictionary * (^blockThatReturnsADict)(void)

实施:

blockThatReturnsADict block = ^NSDictionary *(void) {

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

}

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

更新

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

您 运行 进入了 futures 和 promises 可以解决的标准 class 问题,因此您有两个高级选项:

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

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

对于您的情况,简单的解决方法可能是 #2。传入一个成功块(而不是 void),然后在你的内部块中使用你的结果调用成功块。

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

self.resultDict = dict;