gpt4 book ai didi

swift - 在 ViewModel Swift 中观察鼠标事件(Reactive Cocoa 3.0)

转载 作者:行者123 更新时间:2023-11-28 07:05:48 26 4
gpt4 key购买 nike

我正在尝试使用 RAC 3.0 在我的 View 和我的 viewModel 之间建立连接。 (一直在阅读 Colin Eberhardt great 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($0) })

但我无法让它工作。我设法让它工作的唯一方法是像这样订阅 SignalProducer:

查看:

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

View 模型:

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

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

希望这是有道理的。

最佳答案

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

如果你想要一个Signal,你可以像这样设置信号:

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

在您的 mouseUp 函数中,您将使用类似以下内容发送事件:

sendNext(sink, someValue)

你会观察到使用:

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

关于swift - 在 ViewModel Swift 中观察鼠标事件(Reactive Cocoa 3.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30670667/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com