Rx scan(),不能从种子和另一个observable生成observable

时间:2017-11-15 10:54:53

标签: ios swift reactive-programming rx-swift

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

enter image description here

但我无法实现它,我不知道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)
        }))
}

这会生成编译器错误:

  

无法转换类型的值'(三角形,圆形) - > (三角形,   Circle)'(又名'(Bool,Int) - >(Bool,Int)')预期的参数类型   '(_,_) - > _'

谢谢!

2 个答案:

答案 0 :(得分:1)

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) }
}

答案 1 :(得分:0)

也许&#39;抛出&#39;不见了?看看这个工作示例 - https://github.com/maxvol/RaspSwift/blob/master/RaspSwift/RaspAggregator.swift