Rx scan(),无法从种子和另一个可观察对象生成可观察对象
Rx scan(), cannot generate observable from seed and another observable
我有一个种子值 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)
}))
}
这会产生一个编译器错误:
Cannot convert value of type '(Triangle, Circle) -> (Triangle,
Circle)' (aka '(Bool, Int) -> (Bool, Int)') to expected argument type
'(_, _) -> _'
谢谢!
也许 'throws' 不见了?看看这个工作示例 - https://github.com/maxvol/RaspSwift/blob/master/RaspSwift/RaspAggregator.swift
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())) { (![=11=].0, ) }
}
我有一个种子值 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)
}))
}
这会产生一个编译器错误:
Cannot convert value of type '(Triangle, Circle) -> (Triangle, Circle)' (aka '(Bool, Int) -> (Bool, Int)') to expected argument type '(_, _) -> _'
谢谢!
也许 'throws' 不见了?看看这个工作示例 - https://github.com/maxvol/RaspSwift/blob/master/RaspSwift/RaspAggregator.swift
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())) { (![=11=].0, ) }
}