为了账号安全,请及时绑定邮箱和手机立即绑定

仅在异步函数完成执行后运行代码

仅在异步函数完成执行后运行代码

梵蒂冈之花 2019-11-04 10:06:24
总的来说,我对Swift和Xcode还是比较陌生,并且发现很多困难要设法解决。我正在开发一个利用Parse.com后端服务器的应用程序。为了不阻塞主线程,每当应用程序从服务器下载任何内容时,它都会异步地在其他线程上完成。但是,其余代码将继续在主线程上执行,并且当应该从服务器下载的数据尚未下载时,它将崩溃。我想知道如何在异步函数完成后调用函数来运行,这对于单独文件中的函数必须完成。我读过闭包可能对此有所帮助,但是我发现那里的语法非常困难,对它的解释将不胜感激。但是任何方式都将非常有帮助。谢谢
查看完整描述

3 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

好了,您只需在异步回调的末尾调用该函数。那就是异步回调结束的时候-异步回调中的其他所有东西都结束了!因此,例如:


func myMethod() {

    // ... code ...

    somebody.doSomethingWith(someObject, asynchronousCallback: {

        (thing, otherThing) in

        // ... do whatever

        // --> CALL THE FUNCTION!

    })

    // ... code ...

}

如果问题是,你不知道叫什么功能,你可以配置你周围的功能/对象,以便有人能交出你的函数,而那么你在我说的“调用函数”在上面的斑点叫什么。


例如:


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

}


查看完整回答
反对 回复 2019-11-04
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

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


func myMethod(completionBlock: (result: String) -> ()) 

{

    // ... code ...

    somebody.doSomethingWith(someObject, asynchronousCallback: {

        (thing, otherThing) in

        // ... do whatever

        completionBlock(thing)

    })

    // ... code ...

}


查看完整回答
反对 回复 2019-11-04
?
莫回无

TA贡献1865条经验 获得超7个赞

您能解释一下如何交接职能吗?我事先了解到,您可以在编写“调用函数”的地方运行该函数,但是就像我说的那样,该函数在另一个文件中。我现在正在处理的特定情况是,我编写了一个函数,该函数首先检查要查找的对象是否在本地数据存储中,否则,它检查服务器。由于我希望它可以在任何地方运行,因此将其放在单独的文件中。但是我仍然需要它来调用调用它的类中的函数。再次感谢。

查看完整回答
反对 回复 2019-11-04
  • 3 回答
  • 0 关注
  • 666 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信