我是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)

而且我得到错误:



为什么我不能在.do(onNext)内执行“.onCompleted()”,我应该怎么做才能避免出现警告?

我正在使用XCode 9.0,Swift 4,RXSwift 4.0.0

谢谢

此致

最佳答案

您无法在.onCompleted()中执行.onNext(),因为在这种情况下,您将拥有可观察到的尾部。这也会导致一个存储周期。

就像注释中建议的@Enigmativity一样,您应该使用takeWhile()处理这种情况:

dartScore.asObservable()
    .scan(501) { intermediate, newValue in
        let result = intermediate - newValue
        return result >= 0 ? result : intermediate
    }
    .takeWhile { $0 != 0 }
    .subscribe({
        print($0.isStopEvent ? $0 : $0.element!)
    })

上面的代码产生了一个新的可观察值,当该值为0时完成。

关于swift - RXSwift,重新进入异常被检测到,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47615027/

10-13 08:50