如何在ReactiveCocoa 5中将RACSignal转换为SignalProducer?

时间:2017-03-14 15:49:12

标签: objective-c swift reactive-cocoa reactive-cocoa-4 reactive-cocoa-5

在ReactiveCocoa 4中,我们可以使用function sumValues(arr){ if (arr.length === 0){ return 0; } // if the array is empty if (arr.length > 0) { if (Array.isArray(arr[0])){ return sumValues(arr[0]); } // if the next element is an array // pop the first element off the array var value = arr.shift(); // check its type and conditionally add it to the summation return (Number.isFinite(value) ? value : 0) + sumValues(arr); } } var arr = [1,'a','b',2,[1],'c'] console.log(sumValues(arr)); // 4 arr = [1,'3','b',2,[1,[4,3]],'c']; console.log(sumValues(arr)); // 11 (because '3' is ignored)RACSignal转换为SignalProducer。 ReactiveCocoa 5中不存在此方法,那么我们如何才能做同样的事情呢?

1 个答案:

答案 0 :(得分:3)

ReactiveObjCBridge中使用bridgedSignalProducer()

someSignal.toSignalProducer()

变为

bridgedSignalProducer(from: someSignal)

这会产生SignalProducer<Value?, AnyError>。与RAC 4的startWithNext()不同,RAC 5的startWithValues()仅在SignalProducer类型为Error的{​​{1}}上。为了解决这个问题,我在NoError上添加了一个效用函数,其行为与SignalProducer相同,但适用于任何startWithValues类型(忽略任何错误。)