在for循环中运行多个URLRequest,在上一个完成后执行一个

时间:2017-09-12 11:30:42

标签: ios swift swift3 urlrequest urlsession

在我的应用程序中,我有一个任务,用户将在其中输入from和to日期,url将获取数据。每个URL都将从服务器返回大型JSON字符串。

当用户输入更大的日期间隔使服务器挂起时出现问题。在Android版本的应用程序中,我使用AsyncTask来完成此操作。在那里,如果用户输入大日期间隔,我将请求拆分为多个。我使用for循环来获取每天的数据,并在每天完成任务后在onProgressUpdate中发布进度。

在swift中,我还需要在for循环中使用多个数据任务并发布结果。

for i in 0 ..< dates.count {
   // Getting response from server //
   let response = getResponse(imei: sImei, date: dates[i])
   parseResponse(response)
}

这就是我计划这样做的方式。但不知道如何实现这一点。

我看到了一些使用DispatchGroup的建议。我对此并不熟悉。所以请指导我完成我的任务。

注意:在单个dataTask中提供大的日期间隔会阻塞我的服务器。因为,它是一个低端服务器。所以我必须查询各个日期的数据并将它们组合起来。

2 个答案:

答案 0 :(得分:1)

使用递归:最初i = 0。

 func callApi( i : Int){

    if(dates.count > i){

   // After Getting response from server //

        self.callApi(i: i + 1)

 }

}

答案 1 :(得分:0)

尝试创建一个循环来生成NSBlockOperation并使用addDependency进行上一个操作。

var prevOperation
for i in 0 ..< dates.count {

    var operation = NSBlockOperation() {
        // Getting response from server //
        let response = getResponse(imei: sImei, date: dates[i])
        parseResponse(response)
    }

    if(i>0) {
        operation.addDependency(prevOperation)
    }
    prevOperation=operation;
}