我对Swift和Xcode总体上比较新,我发现很难解决这个问题。
我正在开发一个使用Parse.com
后端服务器的应用。为了不阻塞主线程,每当应用程序从服务器下载任何内容时,它都是异步完成在不同的线程上完成的。然而,其余代码继续在主线程上执行,并且当它应该从服务器获得的数据尚未下载时它崩溃。我想知道如何在异步函数完成后调用函数来运行,并且必须对单独文件中的函数进行此操作。
我读到闭包可能对此有所帮助,但我发现语法非常困难,并且会非常感谢解释。但任何方式都会非常有用。
谢谢
答案 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 ...
}