只有在asynchronous函数完成执行后才能运行代码

我对Swift和Xcode一般都比较陌生,在找出这个问题时遇到了很多困难。

我正在开发一个利用Parse.com后端服务器的应用程序。 为了不阻塞主线程,每当应用程序从服务器下载任何东西时,它都是在asynchronous线程上asynchronous完成的。 然而,其余的代码继续在主线程上执行,并且它应该从服务器获得的数据还没有下载时崩溃。 我想知道如何在asynchronous函数完成后调用函数来运行,而这必须在单独的文件中完成。

我读封闭可能会有所帮助,但我发现那里的语法非常困难,一个解释将不胜感激。 但是,任何方式都会非常有帮助。

谢谢

那么,您只需在asynchronouscallback结束时调用该函数即可。 这就是当asynchronouscallback已经结束的时候 – 就是在asynchronouscallback的其他部分完成的时候! 所以,例如:

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

如果问题是你不知道要调用什么函数,你可以configuration你的周围的函数/对象,这样有人可以向你提供一个函数,这个函数就是你在上面说的“调用函数”的地方所调用的函数。

例如:

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