gpt4 book ai didi

ios - 等待函数在 Swift 中结束

转载 作者:搜寻专家 更新时间:2023-10-31 22:50:39 24 4
gpt4 key购买 nike

我有一个使用 json 获取数据的函数,我将所有数据附加到一个数组中。我尝试创建信号量并等到向信号量发送信号以继续但它不起作用(我不确定我是否正确),然后我在 Stackoverflow 中看到一个问题,答案是创建一个完成处理程序像那样

func application(application: UIApplication!, performFetchWithCompletionHandler completionHandler: ((UIBackgroundFetchResult) -> Void)!) {
getUrunGrup(completionHandler)
}

所以我改变了我的功能

func getUrunGrup(completionHandler: ((UIBackgroundFetchResult) -> Void)!){
Alamofire.request(.GET, "http://213.136.86.160:27701/Thunder/DataService/GetUrunGrup")
.responseJSON {(request, response, jsonObj, error) in
if let jsonresult:NSDictionary = jsonObj as? NSDictionary{
if let result: AnyObject = jsonresult["Result"] {
let elementCount = result.count
for (var i = 0; i<elementCount; ++i){
if let name: AnyObject = result[i]["Adi"]!{
if let kod:AnyObject = result[i]["Kod"]!{
urunUstGrup.append(["Adi": "\(name)", "Kod": "\(kod)"])
println("getUrunGrup \(i)")


}
}
}
}
}

}
completionHandler(UIBackgroundFetchResult.NewData)
println("Background Fetch Complete")

}

但是没有关于我应该如何调用这个函数的答案?

最佳答案

您必须将异步函数传递给稍后调用的处理程序,如下所示:

func application(application: UIApplication!, performFetchWithCompletionHandler completionHandler: ((UIBackgroundFetchResult) -> Void)!) {
loadShows(completionHandler)
}

func loadShows(completionHandler: ((UIBackgroundFetchResult) -> Void)!) {
//....
//DO IT
//....

completionHandler(UIBackgroundFetchResult.NewData)
println("Background Fetch Complete")
}

或(更清洁的方式恕我直言)

添加一个中间的completionHandler

func application(application: UIApplication!, performFetchWithCompletionHandler completionHandler: ((UIBackgroundFetchResult) -> Void)!) {
loadShows() {
completionHandler(UIBackgroundFetchResult.NewData)
println("Background Fetch Complete")
}
}

func loadShows(completionHandler: (() -> Void)!) {
//....
//DO IT
//....
completionHandler()
}

关于ios - 等待函数在 Swift 中结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29744060/

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