繁体   English   中英

等待函数在Swift中结束

[英]Wait for function to end in Swift

我有一个函数用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()
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM