【发布时间】:2015-12-23 20:20:57
【问题描述】:
假设我有一个返回SignalProducer<AnyObject?, NSError> 的函数,我想将生产者绑定到多个MutableProperty<String>。所以,是这样的:
let foo = SignalProducer<AnyObject?, NSError>(value: nil)
let someProperty1 = MutableProperty<String>("")
let someProperty2 = MutableProperty<String>("")
someProperty1 <~ foo
.flatMapError { _ in
SignalProducer<AnyObject?, NoError>.empty
}
.map { _ in
return "test"
}
// someProperty2 <~ foo etc...
为了避免我的功能(例如一些网络内容)多次运行,我需要使用多播。据我从CHANGELOG 可以看出,startWithSignal 是用于此目的的运算符。但是我似乎无法弄清楚如何以声明方式执行此操作。
因此,一种方法可能是在 startWithSignal 的闭包中进行绑定:
foo.startWithSignal { signal, disposable in
someProperty1 <~ signal
.map { _ in
return "test"
}
// someProperty2 <~ signal etc...
}
但是这显然会失败,因为我们需要删除 NSError 部分。因为我们给出的是Signal(与SignalProducer相对),所以我们不能使用flatMapError(在RAC4中,catch在RAC3中)。而且我看不到mapError 怎么能为我们做到这一点?最后,我什至不确定这是否是在 RAC3/RAC4 中处理多播的正确方法?
非常感谢任何帮助。
【问题讨论】:
标签: ios swift reactive-cocoa reactive-cocoa-3