我有以下代码用于创建可观察的属性以进行数据绑定。它还在开发中,所以我不确定最终实现会是什么样子,而且我对Swift还很陌生。
class Observable<T> {
typealias Observer = T -> Void
var value: T {
didSet {
for observer in self.observers {
observer?(self.value)
}
}
}
var observers: [Observer?] = []
init(_ val: T) {
self.value = val
}
}
我希望保留对观察者闭包的弱引用。我不想依赖客户端来确保通过捕获列表传递的闭包是弱引用/未拥有的。特别是因为在给定类上可以有许多可观察属性。
我的Observable类是否可以使闭包引用弱引用?
更新:
我找到了一些资源,我认为这些资源将帮助我实现我的目标: 使Swift方法中的self弱 具体来说,
func methodPointer<T: AnyObject>(obj: T, method: (T) -> () -> Void) -> (() -> Void) {
return { [unowned obj] in method(obj)() }
}
以下链接是关于上述stackoverflow答案的更详细说明:
http://blog.xebia.com/2014/10/09/function-references-in-swift-and-retain-cycles/
这是一个双向绑定的示例:
http://five.agency/solving-the-binding-problem-with-swift/
具体来说,class BondBox<T> {
weak var bond: Bond<T>?
init(_ b: Bond<T>) { bond = b }
}
在这里,监听器被包装在一个名为Bond的类中,在BondBox中进行弱引用。
callAsFunction
是可能的。 - Hai Feng Kao