运行 异步函数执行完毕后的代码

Run code only after asynchronous function finishes executing

总的来说,我对 Swift 和 Xcode 比较陌生,我发现在尝试解决这个问题时遇到了很多困难。

我正在开发一个利用 Parse.com 后端服务器的应用程序。为了不阻塞主线程,每当应用程序从服务器下载任何内容时,它都是在不同的线程上异步完成的。然而,其余代码继续在主线程上执行,并且当它应该从服务器获得的数据尚未下载时崩溃。我想知道如何在异步函数完成后将函数调用到 运行,并且必须对单独文件中的函数执行此操作。

我读到闭包可能对此有帮助,但我发现那里的语法非常困难,非常感谢解释。但任何方式都会非常有帮助。

谢谢

好吧,您只需在异步回调的末尾调用函数即可。那就是异步回调结束的时候——异步回调中的其他一切都结束了!所以,例如:

func myMethod() {
    // ... code ...
    somebody.doSomethingWith(someObject, asynchronousCallback: {
        (thing, otherThing) in
        // ... do whatever
        // --> CALL THE FUNCTION!
    })
    // ... code ...
}

如果问题是你不知道调用什么函数,你可以配置你周围的函数/对象,这样别人就可以hand 你的函数就是你在上面我说 "call the function" 的地方调用的函数。

例如:

func myMethod(f:() -> ()) { // we receive the function as parameter
    // ... code ...
    somebody.doSomethingWith(someObject, asynchronousCallback: {
        (thing, otherThing) in
        // ... do whatever
        // --> CALL THE FUNCTION, by saying:
        f()
    })
    // ... code ...
}

扩展 Matt 的回答,您可以使 myMethod 成为一个将闭包作为参数的方法:

​func​ ​myMethod​(​completionBlock​: (result: String) -> ()) 
{
    // ... code ...
    somebody.doSomethingWith(someObject, asynchronousCallback: {
        (thing, otherThing) in
        // ... do whatever
        completionBlock(thing)
    })
    // ... code ...
}