仅在异步函数完成执行

时间:2015-05-08 22:01:04

标签: ios swift asynchronous parse-platform

我对Swift和Xcode总体上比较新,我发现很难解决这个问题。

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

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

谢谢

2 个答案:

答案 0 :(得分:13)

好吧,您只需在异步回调的末尾调用函数。那是异步回调结束的时候 - 异步回调中的其他所有内容都已完成!所以,例如:

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

如果问题是你知道要调用什么函数,你可以配置周围的函数/对象,这样有人可以手持你一个函数然后你在我所说的地方打电话给#34;打电话给这个功能"在上面。

例如:

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 ...
}

答案 1 :(得分:3)

扩展Matt的答案,你可以使myMethod成为一个以闭包为参数的方法:

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