Rx scan(),无法从种子和另一个可观察对象生成可观察对象
Posted
技术标签:
【中文标题】Rx scan(),无法从种子和另一个可观察对象生成可观察对象【英文标题】:Rx scan(), cannot generate observable from seed and another observable 【发布时间】:2017-11-15 10:54:52 【问题描述】:我有一个种子值 Triangle (Bool)
和一个发出值 Circle (Int)
的 observable。我的意图是每次从该可观察对象发出一个值时生成一个新的可观察对象(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)
))
这会产生编译器错误:
无法转换类型 '(Triangle, Circle) -> (Triangle, Circle)' (aka '(Bool, Int) -> (Bool, Int)') 到预期的参数类型 '(_, _) -> _'
谢谢!
【问题讨论】:
【参考方案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)
【讨论】:
嗯,很简单,用虚拟圆创建种子。再次感谢丹尼尔 :)【参考方案2】:也许“投掷”不见了?看看这个工作示例 - https://github.com/maxvol/RaspSwift/blob/master/RaspSwift/RaspAggregator.swift
【讨论】:
以上是关于Rx scan(),无法从种子和另一个可观察对象生成可观察对象的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI - 从 Swift 类启动的可观察对象不会更新 ContentView() 上的 @ObservedObject