1

我正在尝试使用 RAC 3.0 在我的视图和我的 viewModel 之间建立连接。(一直在阅读 Colin Eberhardt 的精彩教程)我想订阅一个每次func mouseUp(theEvent: NSEvent)调用都会触发的信号。IE

func mouseUp(theEvent:NSEvent){
  //create some signal or pass a variable here to my viewModel
}

然后在我的 viewModel 中我想订阅那个流。

let signalFromview = MutableProperty<String>("")

signalFromView.observe(next: { println($0) })

但我无法让它工作。我设法让它工作的唯一方法是订阅一个 SignalProducer,如下所示:

看法:

func mouseUp(theEvent:NSEvent){
    viewModel.signalFromView.put(someValue)
}

视图模型:

signalFromView.producer
|>start { println($0) }

但这不是我想要的,因为使用生产者“拉”值,即在第一次运行时,viewModel 中的代码将在初始化时以空值运行,因为它试图拉出不存在的东西.. .

希望这是有道理的。

4

1 回答 1

1

MutablePropertys 应该更像属性,而不是作为信号的代理。所以它应该用一个合理的初始值来初始化,这样任何通过 观察它的人producer都会得到有意义的值。

如果你想要一个Signal,你可以用这样的东西设置信号:

let (signal, sink) = Signal<String, NoError>.pipe()

在 mouseUp 函数中,您可以使用以下方式发送事件:

sendNext(sink, someValue)

你会观察到使用:

signal.observe(next: { println($0) })
于 2015-06-05T17:53:51.777 回答