我觉得我理解Reactive
Cocoa的所有基本组件(从概念上讲),通过了解如何将所有组件连接在一起仍然有点令人困惑.
例如,在阅读了有关Signal之后,我完全希望SignalProducer只有一个start()方法返回一个Signal,你可以这样使用它:
mySignalProducer.start().observe(myObserver)
相反,你必须将观察者传递给start(),SignalProducer为你调用observe():
mySignalProducer.start(myObserver)
这意味着SignalProducer的接口要大得多(更需要理解),因为observe()的所有变体都必须在start()上重复(例如startNext()等).
我认为这里有两种可能性:
>有技术原因,为什么start()不能简单地返回一个信号
>我在概念上误解了SignalProducer,导致其界面的期望值很高
如果是1,我猜这与内存管理和一次性用品有关,我还不完全了解.
我更担心2是这样的.在内部,我对SignalProducer的理解基本上映射到了Factory的概念,例如:
mySignalFactory.createSignal().observe(myObserver)
这就是为什么我很惊讶我们没有找到返回Signal的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
原文地址:https://www.jb51.cc/iOS/328519.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。