等待 Swift 中的异步操作完成

2024-04-21

我不知道如何处理这种情况,因为我对 iOS 开发和 Swift 非常陌生。我正在像这样执行数据获取:

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

我的 loadShows() 函数解析从加载到 UIWebView 的网站获取的一堆数据。问题是我有一个计时器在 loadShows 函数中等待 10 秒左右。这允许页面中的 JavaScript 在我开始解析数据之前完全加载。我的问题是完成处理程序在我的 loadShows() 之前完成。

我想做的是为“isCompletedParsingShows”添加一个布尔值,并使completionHandler 行等待完成,直到该布尔值为true。处理这个问题的最佳方法是什么?


您必须将异步函数传递给处理程序以供稍后调用:

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()
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

等待 Swift 中的异步操作完成 的相关文章

随机推荐