我有一个文本字段,用于捕获用户'登录名。
我想知道为什么文本字段会发出最后一个事件,并且有一种方法可以抑制最后一个事件。我尝试添加distinctUntilChanged
,但这没有效果。我认为distinctUntilChanged
不会触发最后一个事件,因为它与上一个事件相同。
let userNameStream: Observable<String> = userNameText
.rx
.text
.orEmpty
.skip(1)
.debug("userNameStream")
.asObservable()
.share(replay:1)
.distinctUntilChanged()
输出
018-02-21 06:05:29.303: userNameStream -> Event next()
userNameText : editingDidBegin
2018-02-21 06:05:38.448: userNameStream -> Event next(1)
2018-02-21 06:05:43.369: userNameStream -> Event next(12)
2018-02-21 06:05:48.880: userNameStream -> Event next(123)
2018-02-21 06:06:03.224: userNameStream -> Event next(123) // Duplicate Event!
userNameText : editingDidEnd
答案 0 :(得分:0)
在debug
运算符
distinctUntilChanged
运算符
let userNameStream: Observable<String> = userNameText
.rx
.text
.orEmpty
.skip(1)
.distinctUntilChanged()
.debug("userNameStream")
.asObservable()
.share(replay:1)
答案 1 :(得分:0)
我正在使用: RxCocoa(4.1.2),RxSwift(4.1.2)
请尝试以下代码:
let disposeBag = DisposeBag()
userNameText
.rx
.text
.orEmpty
.distinctUntilChanged()
.debug()
.subscribe()
.disposed(by: disposeBag)
日志
2018-02-22 11:47:21.618: ViewController.swift:26 (viewDidLoad()) -> subscribed
2018-02-22 11:47:21.620: ViewController.swift:26 (viewDidLoad()) -> Event next()
2018-02-22 11:47:29.560: ViewController.swift:26 (viewDidLoad()) -> Event next(a)
2018-02-22 11:47:30.046: ViewController.swift:26 (viewDidLoad()) -> Event next(ab)
2018-02-22 11:47:30.464: ViewController.swift:26 (viewDidLoad()) -> Event next(abc)
如果您遇到问题,请发布您的图书馆版本,以便我提供帮助。