定义:
NSDictionary * (^blockThatReturnsADict)(void)
实现:
blockThatReturnsADict block = ^NSDictionary *(void) {
[SomeClass fetchADictionaryForKey:@"key" onSuccess:^(NSDictionary* dict) {
//how do i return dict from here?
}];
}
这是一个重新考虑设计符合逻辑的用例吗?
更新
'fetchADictionaryForKey'块是异步的。所以我想我不能只声明一个块变量,然后返回它。
答案 0 :(得分:2)
您遇到了期货和承诺会解决的标准问题类别,因此您有两个高级选项:
1)假设您需要大量的顺序异步块,采用promise库或框架并在任何地方使用promises。
OR
2)如果你没有那么多,那么使用iOS通常使用的相同机制:成功回调。
对于你的情况,简单的出路可能是#2。传入成功块(而不是void),然后在内部块中调用带有结果的成功块。
答案 1 :(得分:0)
你不会从异步块返回结果(因为你显然不能)。异步块将结果设置在适当的位置。例如,您的对象可能具有属性resultDict,而回调只是说
self.resultDict = dict;