为什么 ReactiveSwift 中的 Observer 有 send 方法?
Why does Observer in ReactiveSwift have send method?
当我看到来自 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
当我看到来自 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