在 RxSwift 中具有来自 Observable 的最后两个元素的运算符
Posted
技术标签:
【中文标题】在 RxSwift 中具有来自 Observable 的最后两个元素的运算符【英文标题】:Operator with two last elements from Observable in RxSwift 【发布时间】:2019-10-23 07:05:34 【问题描述】:我有一个Int
s 的可观察序列:
-1-2-3-4-5-6-3-4-5-1-
例如,我需要检测前一个元素何时大于最后一个。
在这个序列中它是(6, 3)
和(5, 1)
:
-1-2-3-4-5-6-3-4-5-1-
-------------ˆ-----ˆ-
在这种情况下我可以使用哪个运算符?
【问题讨论】:
可以scan
运营商帮忙吗?
【参考方案1】:
是的scan
是您要找的接线员:
let stream = Observable<Int>.from([1, 2, 3, 4, 5, 6, 3, 4, 5, 1])
let seed = (0, 0) // (any Int, Int that smaller of all possible values of first emited Int)
let wrongPairs = stream
.scan(seed) last, new -> (Int, Int) in
return (last.1, new)
.filter $0.0 > $0.1
使用scan
,我们将Int
s 的流映射到Int
对的流,然后过滤所有“好”的对(如果小于或等于前一个元素):
-1-2-3-4-5-6-3-4-5-1-
-(0, 1)-(1, 2)-(2, 3)-(3, 4)-(4, 5)-(5, 6)-(6, 3)-(3, 4)-(4, 5)-(5, 1)-
-(6, 3)-(5, 1)-
scan
的缺点是您需要以初始数字开头,这在某些情况下可能会出现问题,但如果您的流始终发出正数 -1
将起作用。
【讨论】:
以上是关于在 RxSwift 中具有来自 Observable 的最后两个元素的运算符的主要内容,如果未能解决你的问题,请参考以下文章
使用 RXSwift 的警报消息的 UIViewController 扩展