在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中不存在此方法,那么我们如何才能做同样的事情呢?
答案 0 :(得分:3)
在ReactiveObjCBridge中使用bridgedSignalProducer()
:
someSignal.toSignalProducer()
变为
bridgedSignalProducer(from: someSignal)
这会产生SignalProducer<Value?, AnyError>
。与RAC 4的startWithNext()
不同,RAC 5的startWithValues()
仅在SignalProducer
类型为Error
的{{1}}上。为了解决这个问题,我在NoError
上添加了一个效用函数,其行为与SignalProducer
相同,但适用于任何startWithValues
类型(忽略任何错误。)