美文网首页
RxSwift Subject

RxSwift Subject

作者: yyggzc521 | 来源:发表于2021-12-13 17:26 被阅读0次

什么是Subject?

一个既是Observable又是Observer的东西

PublishSubject

要先订阅,才能收到事件。刚开始是空的

let subject = PublishSubject<Void>()
// 1
button.rx.tap
    .subscribe(onNext: { _ in
        print("=== A Tap ===")
        subject.onNext(())
    })
    .disposed(by: disposeBag)
// 2
delay(2) {
    subject
        .subscribe(onNext: {
            print("B Tap")
        })
        .disposed(by: self.disposeBag)
}
// 3
delay(4) {
    subject
        .subscribe(onNext: {
            print("C Tap")
        })
        .disposed(by: self.disposeBag)
}

BehaviorSubject

如果你要拿到上一次的值,那么可以使用BehaviorSubject,创建时会有一个预设值

let subject = BehaviorSubject<String>(value: "1")

ReplaySubject

如果你要一订阅就拿到上n次的值,那你要选择ReplaySubject

let subject = ReplaySubject<String>.create(bufferSize: 2)

PublishRelay

只接受.next事件,不接受.error或.completed。也就是说,它不会中断。
PublishRelay其实就是PublishSubject再包一层,因为只能接收.next,所以语法变成了 .accept。和 PublishSubject 一样需要提前订阅

let subject = PublishRelay<String>()

subject.accept("1")

subject
    .debug("A")
    .subscribe()
    .disposed(by: disposeBag)

subject.accept("2")

BehaviorRelay

跟PublishRelay一样,BehaviorRelay就是BehaviorSubject的封裝,跟BehaviorSubject一样,有.value()可以使用,但因为Relay不会.error或disposed的问题,自然也不用处理意外状况。

相关文章

网友评论

      本文标题:RxSwift Subject

      本文链接:https://www.haomeiwen.com/subject/qzbjfrtx.html