gpt4 book ai didi

ios - 异步 swift 3

转载 作者:搜寻专家 更新时间:2023-11-01 07:18:35 25 4
gpt4 key购买 nike

我需要做一个异步调用,这样第二个方法只在第一个方法完成后被调用。这两个方法都是网络调用。像这样:

signIn()
getContacts()

我想确保仅在登录完成后调用 getContacts。 FWIW,我无法编辑方法签名,因为它们来自 Google SDK。

这是我尝试过的:

let queue = DispatchQueue(label: "com.app.queue")

queue.async {
signIn()
getContacts()

}

最佳答案

异步调用,就其本质而言,不会运行完成然后调用下一件事。他们立即返回,甚至在他们被要求完成的任务还没有安排好之前。

您需要一些方法让第二个任务等待第一个任务完成。

NauralInOva 给出了一个很好的解决方案:使用一对 NSOprations 并使它们相互依赖。您还可以将这 2 个操作放入一个串行队列中,第二个操作在第一个操作完成后才会开始。

但是,如果这些调用在另一个线程上触发异步操作,它们可能仍会返回并且操作队列可能会触发第二个操作(getContacts() 调用而不等待 signIn( ) 完成。

另一种选择是设置第一个函数来进行回调:

signIn( callback: {
getContacts()
}

第三种选择是设计一个接受委托(delegate)的登录对象,登录对象将在登录完成后调用委托(delegate)上的 signInComplete 方法。

这是一件很常见的事情,大多数网络 API 都是为它“开箱即用”而构建的。如果 Google API 没有一些工具来处理这个问题,我会感到震惊。

您使用的是什么 Google 框架?你能指出它的文档吗?

关于ios - 异步 swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40385951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com