Ios 在另一个块内执行块

Ios 在另一个块内执行块,ios,objective-c,objective-c-blocks,Ios,Objective C,Objective C Blocks,定义: NSDictionary*(^blockthattreturnsadict)(无效) 实施: blockThatReturnsADict block = ^NSDictionary *(void) { [SomeClass fetchADictionaryForKey:@"key" onSuccess:^(NSDictionary* dict) { //how do i return dict from here? }]; } 在这种情况下,重新思考

定义:

NSDictionary*(^blockthattreturnsadict)(无效)

实施:

blockThatReturnsADict block = ^NSDictionary *(void) {

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

}
在这种情况下,重新思考设计是否合乎逻辑

更新


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

你遇到了期货和承诺可以解决的标准问题,因此你有两个高级选项:

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

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


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

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

self.resultDict = dict; 

假设该块是异步的?是的,我更新了问题谢谢。我想在我的案例中,使用成功块将是一个更干净的实现。