Swift:使用函数对象和强引用在类之间进行回调

时间:2015-03-29 12:53:05

标签: ios swift

我曾经以下列方式在类之间实现回调:

class MyViewController: UIViewController {

    var service = MyService()

    func onSomeEvent() {
        service.callback = onServiceResult
    }

    func onServiceResult(result: String) {
    }
}

class MyService {
    var callback: ((result: String) -> Void)?

    func someThingAsync() {
        //Some work being done in background thread
        //...
        //When it is done
        callback?(result: result)
    }
}

后来我意识到这会创建强大的引用循环,因为当我将它分配给onServiceResult时,MyService.callback将保持MyViewController的隐式self。

实现没有引用周期的回调的另一种方法是让代理具有周参考,但是当你只想要一个简单的回调时,这似乎非常冗长和过多。

在没有参考周期的情况下,Swift中是否有任何方法可以像上面的代码那样简单地进行回调?或者,如果可能的话,如何修改上面的代码以保持简单,没有参考周期?

0 个答案:

没有答案