在 ViewModel Swift 中观察鼠标事件(Reactive Cocoa 3.0)
Observing mouse event in ViewModel Swift (Reactive Cocoa 3.0)
我正在尝试使用 RAC 3.0 在我的视图和我的 viewModel 之间建立连接。 (一直在阅读 Colin Eberhardt,很棒 tutorials on this)我想订阅一个每次调用 func mouseUp(theEvent: NSEvent)
时都会触发的信号。即
func mouseUp(theEvent:NSEvent){
//create some signal or pass a variable here to my viewModel
}
然后在我的 viewModel 中,我想订阅该流。
let signalFromview = MutableProperty<String>("")
signalFromView.observe(next: { println([=13=]) })
但我无法让它工作。我设法让它工作的唯一方法是像这样订阅 SignalProducer:
查看:
func mouseUp(theEvent:NSEvent){
viewModel.signalFromView.put(someValue)
}
视图模型:
signalFromView.producer
|>start { println([=15=]) }
但这不是我想要的,因为使用生产者 'pulls' 值,即在第一次 运行 初始化时,viewModel 中的代码将 运行 初始化为一个空值,因为它试图拉出不存在的东西...
希望这是有道理的。
MutableProperty
s 应该更像属性一样使用,而不是作为信号的代理。所以它应该用一个合理的初始值初始化,这样任何通过 producer
观察它的人都会得到有意义的值。
如果你想要 Signal
,你可以这样设置信号:
let (signal, sink) = Signal<String, NoError>.pipe()
在您的 mouseUp 函数中,您将使用类似以下内容发送事件:
sendNext(sink, someValue)
你会观察到使用:
signal.observe(next: { println([=12=]) })
我正在尝试使用 RAC 3.0 在我的视图和我的 viewModel 之间建立连接。 (一直在阅读 Colin Eberhardt,很棒 tutorials on this)我想订阅一个每次调用 func mouseUp(theEvent: NSEvent)
时都会触发的信号。即
func mouseUp(theEvent:NSEvent){
//create some signal or pass a variable here to my viewModel
}
然后在我的 viewModel 中,我想订阅该流。
let signalFromview = MutableProperty<String>("")
signalFromView.observe(next: { println([=13=]) })
但我无法让它工作。我设法让它工作的唯一方法是像这样订阅 SignalProducer:
查看:
func mouseUp(theEvent:NSEvent){
viewModel.signalFromView.put(someValue)
}
视图模型:
signalFromView.producer
|>start { println([=15=]) }
但这不是我想要的,因为使用生产者 'pulls' 值,即在第一次 运行 初始化时,viewModel 中的代码将 运行 初始化为一个空值,因为它试图拉出不存在的东西...
希望这是有道理的。
MutableProperty
s 应该更像属性一样使用,而不是作为信号的代理。所以它应该用一个合理的初始值初始化,这样任何通过 producer
观察它的人都会得到有意义的值。
如果你想要 Signal
,你可以这样设置信号:
let (signal, sink) = Signal<String, NoError>.pipe()
在您的 mouseUp 函数中,您将使用类似以下内容发送事件:
sendNext(sink, someValue)
你会观察到使用:
signal.observe(next: { println([=12=]) })