我有一个'updateBlocks'(闭包),我在一个单例类中通知任何观察者(UIViewControllers等)当数据更新。Swift - 当调用者被释放时如何从数组中正确地移除块?
我想知道什么最好的方式来删除观察员将是当观察员被解除分配(或不再需要更新)时,它不会被执行。
这里是我的当前设置:
MySingleton类
var updateBlock: (() ->())? {
didSet {
self.updateBlocks.append(updateBlock!)
self.updateBlock!() // Call immediately to give initial data
}
}
var updateBlocks = [() ->()]()
func executeUpdateBlocks() {
for block in updateBlocks {
block()
}
}
MyObserver类
MySingleton.shared.updateBlock = {
...handle updated data...
}
MySingleton.shared.updateBlock = nil // How to properly remove???
是啊,我是想用不必使用添加/删除功能就完事了,但它是马虎不得。我结束了使用这样的事情,以帮助更好地跟踪呼叫者: func addUpdateBlock(_ block:@escaping() - >(),sender:AnyHashable){ updateBlocks [sender] = block } – JimmyJammed