我曾经以下列方式在类之间实现回调:
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中是否有任何方法可以像上面的代码那样简单地进行回调?或者,如果可能的话,如何修改上面的代码以保持简单,没有参考周期?