我是RXSwift的初学者,我的代码出了问题。
下面是我的代码:
let dartScore = PublishSubject<Int>()
dartScore.asObservable()
.scan(501) { intermediate, newValue in
let result = intermediate - newValue
return result >= 0 ? result : intermediate
}
.do(onNext: {
if $0 == 0 {
dartScore.onCompleted()
}
})
.subscribe({
print($0.isStopEvent ? $0 : $0.element!)
})
.disposed(by: disposeBag)
dartScore.onNext(13)
dartScore.onNext(50)
dartScore.onNext(60)
dartScore.onNext(378)
我遇到了错误:
⚠️ 检测到重入异常。 ⚠️
调试:您可以在 /****RxSwift/RxSwift/Rx.swift:97 中设置断点并观察调用堆栈来调试此问题。
问题:这种行为破坏了可观察序列语法。
next (error | completed)?
这种行为破坏了语法,因为序列事件之间存在重叠。可观察序列正试图在前一个事件发送完成之前发送事件。
为什么我不能在 .do(onNext) 内部执行 ".onCompleted()",我应该怎么做才能避免警告?
我使用的是 XCode 9.0、swift 4 和 RXSwift 4.0.0。
谢谢
最好的问候
do
中使用.onCompleted()
。你可能想使用takeWhile
。 - Enigmativityview.endEditing(true)
,因此它进入了编辑和结束编辑的循环中。 - Skywalker