【发布时间】:2017-11-28 03:39:33
【问题描述】:
我有一个带有完成处理程序的 Swift 函数,我希望在完成某个网络请求时调用它。如果服务器响应说有更多数据(提供offset),可以重复网络请求。
我最初是这样称呼它的:
func myMainFunction(){
getTasks(project: project, paginationToken: nil) {
print("This never fires...")
}
}
而我的getTasks()函数是这样的:
func getTasks(project: Project, paginationToken: String?, completion: @escaping () -> Void){
var url = "..."
if let token = paginationToken{
url += "&offset=\(token)"
}
Alamofire.request(url).responseJSON { response in
switch response.result {
case .success(let value):
let json = JSON(value)
//...
//Check for pagination
let offset = json["next_page"]["offset"].stringValue
if !offset.isEmpty{
//Theres a pagination token available, go again!
getTasks(project: project, paginationToken: offset){}
}else{
print("This prints to the log on the last run through")
completion()
}
case .failure(let error):
print("Task error: \(error)")
}
}
}
如果从来没有offset,那么completion() 处理程序就可以正常工作。但是如果必须再次调用getTasks(),完成处理程序会以某种方式失效,并且永远不会返回到我原来的myMainFunction()。
有什么想法吗?
【问题讨论】:
标签: swift alamofire completionhandler