gpt4 book ai didi

第二次调用函数时未调用 Swift 完成处理程序

转载 作者:行者123 更新时间:2023-11-28 12:13:56 25 4
gpt4 key购买 nike

我有一个带有完成处理程序的 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)")
}
}
}

如果从不存在偏移量,那么completion() 处理程序可以正常工作。但是,如果必须再次调用 getTasks(),则完成处理程序会以某种方式失效,并且永远不会返回到我原来的 myMainFunction()

有什么想法吗?

最佳答案

如果 offset 不为空,则传递空闭包。您需要再次将完成参数转发给 getTasks。试试这个。

//...
if !offset.isEmpty {
getTasks(project: project, paginationToken: offset, completion: completion)
}
//...

关于第二次调用函数时未调用 Swift 完成处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47523612/

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