У меня есть функция 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()
.
Любые идеи?