Rx扫描(),不能从种子和另一个可观察的地方生成可观察的

我有一个种子值Triangle (Bool)和一个观察值发出Circle (Int)值。 我的目的是每次从该可观察值发出一个值时生成一个新的可观测值(Triangle, Circle) ,将Triangle值转换为否定当前值。 这是我的大理石图:

在这里输入图像说明

但是我无法实现,我不知道scan是否是正确的操作符。 这是我的代码:

 typealias Triangle = Bool typealias Circle = Int func scan() { let triangle: Triangle = false circleObservable .scan(triangle, accumulator: ({ (triangle, circle) -> (Triangle, Circle) in return (!triangle, circle) })) } 

这会产生一个编译器错误:

无法将types'(Triangle,Circle) – >(Triangle,Circle)'(aka'(Bool,Int) – >(Bool,Int)')的值转换为期望的参数types'(_,_) – > _'

谢谢!

 circleObservable.scan((Triangle(false), Circle()), accumulator: { lastValue, circle -> (Triangle, Circle) in (!lastValue.0, circle) }) 

或者更简单:

 typealias Triangle = Bool typealias Circle = Int func scan(circle: Observable<Circle>) -> Observable<(Triangle, Circle)> { return circle.scan((Triangle(false), Circle())) { (!$0.0, $1) } } 

也许“抛出”不见了? 看看这个工作示例 – https://github.com/maxvol/RaspSwift/blob/master/RaspSwift/RaspAggregator.swift

Interesting Posts