gpt4 book ai didi

ios - 如何从异步方法返回多个结果?

转载 作者:行者123 更新时间:2023-11-28 21:03:00 26 4
gpt4 key购买 nike

注意:这个问题与使用的语言无关,即Swift/Objective-C

我似乎无法理解如何解决这样的问题。连续处理数据的异步方法如何将这些处理后的值返回给函数?

Example Class structure of -> ClassName

  1. 一个名为 -(void)infoCallBack 的方法,这是您必须调用才能持续获得返回的方法。
  2. -(void)infoCallBack 内部 -> 那里有一个异步方法 [self startRecording],它通过 回调方法使用 AudioQueues 进行异步录音 void AudioInputCallback(..param..)
  3. 最后在 void AudioInputCallback(..param..) 里面 -> 那里有一个方法 -(void) processAudio,它持续处理数据并给我们一个 整数

如何调用像 [ClassName infoCallBack] 这样的方法,以便我们不断获取所有这些已处理的整数?


编辑: 我搜索过 SO,遇到了完成处理程序 block :虽然完成处理程序只在 completionHandler() 之后返回一次值叫做。此外,此方法中的另一个问题是如何将此 completionHandler 传递给 className 结构中的多个方法,如图所示。

我遇到了 delegates,它说当不断返回不同的值并且某些状态发生变化时,我们应该调用委托(delegate)。但是在我从 ClassName 调用函数 infoCallBack 后,我被困在如何返回值,即 [ClassName infoCallBack],它可以不断地为调用此函数的人提供正在处理的值。

最佳答案

其实我没有完全理解你的问题,但我会在我的理解中给你答案

在我看来,您可以使用 block 来处理进程更新。

typedef void (^ProcessHandlerBlock) (NSInteger i);

- (void)infoCallBackWithProcessHandlerBlock:(ProcessHandlerBlock)block {
[self startRecordingWithProcessHandlerBlock:(ProcessHandlerBlock)block];
}

- (void)startRecordingWithProcessHandlerBlock:(ProcessHandlerBlock)block {
[self audioInputCallbackWithParam1:@"1" param2:@"2" processHandlerBlock:(ProcessHandlerBlock)block];
}

- (void)audioInputCallbackWithParam1:(id)param1 param2:(id)param2 processHandlerBlock:(ProcessHandlerBlock)block {
[self processAudioWithProcessHandlerBlock:(ProcessHandlerBlock)block];
}

- (void)processAudioWithProcessHandlerBlock:(ProcessHandlerBlock)block {
// Assume this is your process method callback
[NSTimer scheduledTimerWithTimeInterval:1.f repeats:YES block:^(NSTimer * _Nonnull timer) {
// After receive integer, pass it to block.
block(1);
}];
}

当你想使用它们时,调用

[self infoCallBackWithProcessHandlerBlock:^(NSInteger i) {
NSLog(@"%l", i); // Do whatever you want here
}];

infoCallBackWithProcessHandlerBlock 方法的完成 block 中,您可以使用结果整数来执行您想要的操作。

关于ios - 如何从异步方法返回多个结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47374953/

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