gpt4 book ai didi

swift - Moya - 使用 NSOperation 链式请求

转载 作者:行者123 更新时间:2023-11-28 07:46:18 28 4
gpt4 key购买 nike

我有几个需要链接的请求。我可以这样做

provider.request(.apples) { (result) in
switch result {
case .success(let response):

provider.request(.oranges) { (result) in
switch result {
case .success(let response):

...couple of other fruits

case .failure(let error):
print(error)
}
}

case .failure(let error):
print(error)
}
}

但我想使用 NSOperation 将它们链接起来。

我该怎么做?

最佳答案

我是 Swift 的初学者,但是通过代码我了解到您正在请求“苹果”。如果该请求成功,则再次请求“橙子”,如果成功,则请求其他水果,依此类推。

是的,您可以使用 NSOperation 链接它们,请参阅我对以下问题的回答,我在其中概述了 2 种不同的方法。

Do NSOperations and their completionBlocks run concurrently?

注意:这里有几种情况:1)是否只有“apples”请求成功才需要请求“oranges”,只有“oranges:请求成功”才能请求其他水果?在这种情况下,您可以引用上述问题中的答案。示例流程如下:

RequestFruitOperation *requestApplesOperation = [[RequestFruitOperation alloc] initWithFruitType:Apples];

[requestApplesOperation setCompletionBlock:^{
if(requestApplesOperation.success){
//add oranges
RequestFruitOperation *requestOrangesOperation = [[RequestFruitOperation alloc] initWithFruitType:Oranges];
[requestOrangesOperation setCompletionBlock:^{
if(requestOrangesOperation.success) {
//add mangoes
RequestFruitOperation *requestMangosOperation = [[RequestFruitOperation alloc] initWithFruitType:Mangos];
[operationQueue addOperation:requestMangosOperation];
}
}];
[operationQueue addOperation:requestOrangesOperation];
}

}
[operationQueue addOperation:requestApplesOperation];

2) 如果您可以并行请求“苹果”、“橘子”和“其他水果”,而无需等待彼此成功,那么您就不需要将它们链接在一起。您可以只将操作添加到队列中。

RequestFruitOperation *requestApplesOperation = [[RequestFruitOperation alloc] initWithFruitType:Apples];
[operationQueue addOperation:requestApplesOperation];

RequestFruitOperation *requestOrangesOperation = [[RequestFruitOperation alloc] Oranges];
[operationQueue addOperation:requestOrangesOperation];

RequestFruitOperation *requestMangosOperation = [[RequestFruitOperation alloc] Mangos];
[operationQueue addOperation:requestMangosOperation];

关于swift - Moya - 使用 NSOperation 链式请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50931239/

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