为什么SignalProducer不返回信号?

杰森·佩帕斯(Jason Pepas)

我觉得我(从概念上)理解了ReactiveCocoa的所有基本组成部分,通过了解如何将所有部分连接在一起仍然有点令人困惑。

例如,在阅读了有关Signal的内容之后,我完全希望SignalProducer仅具有一个start()方法,该方法返回了Signal,您可以这样使用它:

mySignalProducer.start().observe(myObserver)

相反,您必须将观察者传递给start(),SignalProducer会为您调用observe():

mySignalProducer.start(myObserver)

这意味着SignalProducer的接口要大得多(需要更多理解),因为observe()的所有变体都必须在start()上复制(例如,startNext()等)。

我认为这里有两种可能性:

  1. 有一些技术原因导致start()无法简单地返回Signal
  2. 我从概念上误解了SignalProducer,导致对其界面的期望不高

如果是1,我想这与我尚不完全了解的内存管理和一次性设备有关。

我更担心2的情况。在内部,我对SignalProducer的理解基本上映射到Factory的概念,例如:

mySignalFactory.createSignal().observe(myObserver)

这就是为什么我很惊讶我们找不到返回信号的start()的原因。

如果社区能够在这里阐明一些观点,我将非常感激。

谢谢!

科森

我认为主要原因是某些事件可以在生产者启动时立即发送。

例如,如果您不喜欢启动系列界面,并希望在启动时直接获得信号:

extension SignalProducer {
    func getSignalFromStart() -> Signal<Value, Error> {
        var signal: Signal<Value, Error>!
        startWithSignal{ innerSignal, _ in
            signal = innerSignal
        }
        return signal
    }
}

然后,您可以错过一些活动。试试这个:

// When property.producer starts, it will send its current value immediately
let property = MutableProperty(1)

property.producer.getSignalFromStart().observeValues { value in
    print("getSignalFromStart \(value)") // maybe not what you want, only gets 2
}

property.producer.startWithValues { value in
    print("normal start \(value)") // this normally gets 1 and 2
}

property.value = 2

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么RACCommand的块会返回信号?

来自分类Dev

为什么不重新触发此非返回信封?

来自分类Dev

iBeaconResult不返回信标对象数组

来自分类Dev

为什么hIsEOF不返回?

来自分类Dev

为什么phantomjs不返回

来自分类Dev

为什么我的程序什么也不返回?

来自分类Dev

为什么XMPP函数什么也不返回?

来自分类Dev

为什么等待条件释放锁但信号不释放?

来自分类Dev

为什么grep在这里返回SIGPIPE(信号13)?

来自分类Dev

为什么linqtotwitter不返回ID

来自分类Dev

为什么NHibernate不返回任何数据?

来自分类Dev

为什么地图不返回其值?

来自分类Dev

为什么返回值不更新?

来自分类Dev

为什么这段代码不返回

来自分类Dev

为什么range()不返回列表?

来自分类Dev

为什么Linux accept()不返回EINTR?

来自分类Dev

为什么此查询不返回结果?

来自分类Dev

为什么sumBy(selector)不返回Long?

来自分类Dev

为什么len(None)不返回0?

来自分类Dev

为什么不遵守我的返回命令?

来自分类Dev

为什么不遵守我的返回命令?

来自分类Dev

为什么2 == 4不返回false?

来自分类Dev

函数不返回值,为什么?

来自分类Dev

为什么此表单不返回结果?

来自分类Dev

为什么Linux accept()不返回EINTR?

来自分类Dev

为什么查询不返回值

来自分类Dev

为什么不返回值?

来自分类Dev

为什么grabCurrentURL()不返回当前URL

来自分类Dev

为什么initWithCoder不返回实例类型?