为什么 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