绑定剂量似乎不适用于 ReactiveCocoa Swift
Binding dose not seem to be working from ReactiveCocoa Swift
var viewModel = CTCViewModel()
var mainView: CTCMainView {
return self.view as! CTCMainView
}
override func viewDidLoad() {
super.viewDidLoad()
let callButtonEnabledSignal = self.viewModel.rac_valuesForKeyPath("callButtonEnabled", observer: self.viewModel)
callButtonEnabledSignal.setKeyPath("enabled", onObject: self.mainView.callButton, nilValue: false)
self.mainView.callButton.rac_signalForControlEvents(UIControlEvents.TouchUpInside).subscribeNext {
(Void) -> Void in
self.viewModel.callButtonEnabled = !self.viewModel.callButtonEnabled
}
}
当我按下按钮时,self.viewModel.callButtonEnabled
确实得到了更新,但是按钮的 enabled
属性 得到了更新。好像没有绑定。
在您的 callButtonEnabled
属性 上添加 dynamic
:
class CTCViewModel: NSObject {
dynamic var callButtonEnabled = false
}
因为 rac_valuesForKeyPath
的实现是使用 Objective-C 运行时,编译器在访问 Swift 属性时可以忽略它。您将 属性 标记为 dynamic
让编译器始终使用 Objective-C 运行时。
var viewModel = CTCViewModel()
var mainView: CTCMainView {
return self.view as! CTCMainView
}
override func viewDidLoad() {
super.viewDidLoad()
let callButtonEnabledSignal = self.viewModel.rac_valuesForKeyPath("callButtonEnabled", observer: self.viewModel)
callButtonEnabledSignal.setKeyPath("enabled", onObject: self.mainView.callButton, nilValue: false)
self.mainView.callButton.rac_signalForControlEvents(UIControlEvents.TouchUpInside).subscribeNext {
(Void) -> Void in
self.viewModel.callButtonEnabled = !self.viewModel.callButtonEnabled
}
}
当我按下按钮时,self.viewModel.callButtonEnabled
确实得到了更新,但是按钮的 enabled
属性 得到了更新。好像没有绑定。
在您的 callButtonEnabled
属性 上添加 dynamic
:
class CTCViewModel: NSObject {
dynamic var callButtonEnabled = false
}
因为 rac_valuesForKeyPath
的实现是使用 Objective-C 运行时,编译器在访问 Swift 属性时可以忽略它。您将 属性 标记为 dynamic
让编译器始终使用 Objective-C 运行时。