当我看到 ReactiveSwift 的示例代码时,我感到困惑,因为直觉上观察者应该接收事件。为什么Observer
被设计为具有send(_:)
方法?
// Signal.pipe is a way to manually control a signal.
// the returned observer can be used to send values to the signal
let (signal, observer) = Signal<Int, Never>.pipe()
observer.send(value: 10)
我同意这在pipe
的上下文中有点令人困惑,其中"观察者"通常被认为是输入,而术语"观察者"让您考虑观察信号的输出。
我的想法是,在这两种情况下,即使这些事情非常不同,也会观察到一些东西:
在观察信号的上下文中,信号正在向观察者- 发送事件,即观察者正在"观察"信号。
- 在
pipe
的上下文中,你的代码正在向观察者发送事件,即观察者正在"观察"你的代码。
希望这可以解释为什么在两种情况下都使用相同的类型。请注意,您可以使用从pipe()
返回的观察器直接观察信号:
let someSignal: Signal<Int, Never> = ...
let (signal, observer) = Signal<Int, Never>.pipe()
someSignal.observe(observer)
此代码通过observer
将事件从someSignal
"管道"signal
。