Ios Swift:如何停止多个API调用

Ios Swift:如何停止多个API调用,ios,swift,Ios,Swift,我的应用程序允许用户搜索特定的内容,然后我从不同的来源调用多个API,以获取他们搜索内容的信息 我想添加一个停止按钮,以便用户可以停止搜索,例如,如果他们有一个坏的wifi连接,搜索时间太长。我用不同的方法调用API,所以当用户单击停止按钮时,我不知道哪个方法正在运行 当用户单击“停止”时,是否有人熟悉停止应用程序中运行的所有函数甚至API调用的方法?您可以尝试以下方法: 为每个API调用创建一个操作 将Operation添加到OperationQueue以启动API调用 调用operatio

我的应用程序允许用户搜索特定的内容,然后我从不同的来源调用多个API,以获取他们搜索内容的信息

我想添加一个停止按钮,以便用户可以停止搜索,例如,如果他们有一个坏的wifi连接,搜索时间太长。我用不同的方法调用API,所以当用户单击停止按钮时,我不知道哪个方法正在运行

当用户单击“停止”时,是否有人熟悉停止应用程序中运行的所有函数甚至API调用的方法?

您可以尝试以下方法:

  • 为每个API调用创建一个
    操作
  • Operation
    添加到
    OperationQueue
    以启动API调用
  • 调用
    operationQueue.cancelAllOperations()
    以取消所有API调用
您可以尝试以下方法:

  • 为每个API调用创建一个
    操作
  • Operation
    添加到
    OperationQueue
    以启动API调用
  • 调用
    operationQueue.cancelAllOperations()
    以取消所有API调用

虽然使用
操作队列可以说是更好的解决方案,但您也可以将多个
URLSessionDataTask
存储在一个数组中,并使用
.cancel()
在一个循环中停止它们

例:


虽然使用
操作队列
可以说是更好的解决方案,但您也可以将多个
URLSessionDataTask
存储在一个数组中,并使用
.cancel()
将它们全部停止在一个循环中

例:


您可以使用具有初始真值的布尔标志变量,将所有api调用放在检查该标志的if语句中。按stop时,您只需将标志值设置为false。我考虑过这一点,但问题可能是用户搜索(bool=true),他们按stop(bool=false),然后,当原始搜索仍在进行时,他们搜索新的内容,使bool=true,并允许两个搜索都进行。您可以使用具有初始真值的布尔标志变量,将所有api调用放在检查该标志的if语句中。按stop时,您只需将标志值设置为false。我考虑过这一点,但问题可能是用户搜索(bool=true),他们按stop(bool=false),然后在原始搜索仍在进行时搜索新内容,使bool=true,并允许两个搜索都通过hanks。我不熟悉操作,但我会调查一下。您有什么推荐信吗?您也可以取消个别操作。还可以编写操作,这样,如果他们在循环中工作,他们就可以检查isCanceled标志的状态,如果他们被取消,就可以提前终止操作。这里有一些关于这个主题的好的WWDC视频。谢谢。我不熟悉操作,但我会调查一下。您有什么推荐信吗?您也可以取消个别操作。还可以编写操作,这样,如果他们在循环中工作,他们就可以检查isCanceled标志的状态,如果他们被取消,就可以提前终止操作。关于这一主题,WWDC有几个很好的视频。
let task1 = URLSession.shared.dataTask(...
let task2 = URLSession.shared.dataTask(...

let taskArr = [task1, task2]

for task in taskArr {
    task.cancel()
}