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;
假设该块是异步的?是的,我更新了问题谢谢。我想在我的案例中,使用成功块将是一个更干净的实现。