我发现有可能使用willSet
& didSet
替换在Objective-C中使用的部分KVO类型代码。 Objective-C的一个好处是它的动态性,特别是在运行时创建行为的能力。为了willSet
& didSet
对我有用,我需要能够动态分配他们的行为。是否可以设置他们的内容"或者他们动态体现的行为?一个用例是将模型的属性绑定到视图。在伪代码中:
mvvm = new MVVM(packageModel, 'url', packageView, 'urlLabel')
class MVVM {
init(model: Model, modelPropertyName : NSString, view: View, viewPropertyName : NSString) {
model.propertyDescriptor('willSet', modelPropertyName, (newUrl){
view[viewPropertyName].text = newUrl
})
}
}
答案 0 :(得分:3)
这样的事情怎么样:
println("begin")
import Swift
class Observable<T> {
typealias ChangeNotifier = (T) -> ()
init(t:T) { self.value = t }
var value:T { didSet {
for n in notifiers {
n(self.value)
}
}}
func subscribe(notifier:ChangeNotifier) {
notifiers.append(notifier)
}
private var notifiers: [ChangeNotifier] = []
}
class ViewModel {
var numberOfSheep:Observable<Int> = Observable<Int>(t:1)
}
class ViewController {
var viewModel:ViewModel? = nil { didSet {
viewModel?.numberOfSheep.subscribe(){ t in
println("value is now \(t)")
}}}
}
var vc = ViewController()
var vm = ViewModel()
vc.viewModel = vm
vm.numberOfSheep.value = 2
vm.numberOfSheep.value = 3
println("end")
我尝试将转化运算符添加到ModelObserver:&#34; func __conversion() - &gt; T&#34;,但似乎此功能不再有效。我不确定是否有解决办法。理想情况下,它可以像C ++智能指针一样,也就是说 - 透明。