【问题标题】:Swift callback after object function对象函数后的 Swift 回调
【发布时间】:2017-01-11 12:40:37
【问题描述】:

我有一个类来存储用户地理信息和获取位置等。这个类对象在我的 Home ViewController 中使用。

例子:

class Geo {

    ...
    getLocation()
    getRoute()
    ...

}

class ViewController {
    var geo = Geo()
    geo.getRoute()

    // I want a call a function after getRoute is complete.
}

我知道的一种方法是使用 delegate,其中我的 ViewController 是 Geo 类对象的委托。但是是否有任何直接简单的方法,因为 Geo 对象的任何方法都将被应用程序中的任何控制器使用。

【问题讨论】:

  • 使用completionHandler。

标签: ios swift callback swift3


【解决方案1】:

正如 cmets 中所建议的,您可以将函数传递给 getRoute,以便在完成时调用。您必须将 getRoute 的声明更改为类似

func getRoute(_ completionHandler: (() -> Void)?) {...}

然后在getRoute 实现调用结束时:

if let completion = completionHandler {
    completion()
}

当您调用getRoute 时,您只需将要调用的函数作为最后一个参数传递:

geo.getRoute() {
   // do something when getRoute is finished
}

【讨论】:

  • 谢谢,您的回答对我有用!我还有一个问题,在另一个地方,当我使用相同的代码时它不起作用,因为主要功能是将控制权传递给位置委托。当控制权传递给其他异步函数时如何处理这种情况。
  • 您能否举一个该代码的示例,并更具体地说明什么不起作用。 (如果新问题与这个问题足够不同,甚至可能会问一个新的 SO 问题,或者如果它们几乎相同,则只需编辑这个问题)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 2015-09-12
  • 2016-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多