对象函数后的Swift回调

时间:2017-01-11 12:40:38

标签: ios swift callback swift3

我有一个类来存储用户地理信息&获取位置等。此类对象用于我的Home ViewController。

示例:

class Geo {

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

}

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

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

我知道的一种方法是使用委托 ,其中我的ViewController是Geo类对象的委托。但有没有直接&简单的方法,导致任何Geo对象的方法将被app中的任何控制器使用。

1 个答案:

答案 0 :(得分:3)

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

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

然后在getRoute实施电话的结尾处:

if let completion = completionHandler {
    completion()
}

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

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