gpt4 book ai didi

ios - 从 block 内回调 block

转载 作者:行者123 更新时间:2023-11-29 11:34:38 24 4
gpt4 key购买 nike

我想我正在经历一个脑雾日……但是有可能从一个 block 内传回一个 block 吗?

例如:

typedef void(^SomeBlock)(int someValue);
typedef void(^SomeOtherBlock)(int someOtherValue, SomeBlock originalBlock); // how would you pass SomeBlock?


- (void)getSomeValue:(SomeOtherBlock)completionBlock {
[self someMethod:^(int someValue){
// How could I call SomeOtherBlock & pass back SomeBlock?
int someOtherValue = 2;
// I.e, completionBlock(someOtherValue, SomeBlock);
}];
}
- (void)someMethod:(SomeBlock)completionBlock {
completionBlock(1);
}

这是我得到的,但它看起来真的很丑:

- (void)getSomeValue:(SomeOtherBlock)completionBlock {
[self someMethod:^(int someValue) {
int someOtherValue = 2;
SomeBlock someBlock = ^(int innerVal) {
innerVal = someValue;
};
completionBlock(someOtherValue, someBlock);
}];
}
- (void)someMethod:(SomeBlock)completionBlock {
completionBlock(1);
}

简而言之,目标是执行第一个 block 并分析来自该 block 的回调。然后,将第一个 block 作为参数传递给第二个 block 。

最佳答案

问题的答案非常直截了当,但我怀疑这不是您真正的问题。您的问题中没有任何内容表明异步行为,但您一直在说“完成 block ”。从非异步 block 中获取结果只是返回结果的问题:

// SomeBlock takes an int and returns an int
// (In your example you have it return void, but then what is "analyzed?"
typedef int(^SomeBlock)(int someValue);

// SomeOtherBlock takes an int and also a SomeBlock
typedef void(^SomeOtherBlock)(int someOtherValue, SomeBlock originalBlock);


void executeAnalyzeAndContinue(SomeBlock firstBlock, SomeOtherBlock secondBlock, int value) {
// execute the first block
int result = firstBlock(value);

// and analyze the callback (return value?) from that block.
if (result == 2) { NSLog(@"%@", @"It was two"); }

// Then, pass the first block as a parameter to the second block (and also a value?)
secondBlock(result, firstBlock);
}

这真的是你的意思吗? (我怀疑用“一些 block ”之类的东西做这个抽象会让它比实际情况复杂得多,而且你真的是想问一些相关的问题而不是这个问题。而且我认为你的意思是“执行”当你说“实现。”)

关于ios - 从 block 内回调 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50478639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com