版权声明:转载请标注原文地址。邮箱[email protected] https://blog.csdn.net/Xoxo_x/article/details/80808431
可以同时作为 observable
和 observer
称为 subject
常见的subject
有以下几种:
1.PublishSubject
执行的是会员制 只会把消息发送给消息之前的订阅者,一旦取消订阅,则不发送
2.BehaviorSubject
试用制度,没有发生事件时 给订阅者默认发送的内容 当事件已经发生过一次,当订阅时没有发生时间,返回最近的一次的历史事件
3.ReplaySubject
可控制发送给订阅者历史事件的范围
4.Variable
需要某个值需要有响应式特性的 比如:按钮是否禁用,是否显示某个控件
使用方法:
PublishSubject
//PublishSubject
let subject = PublishSubject<String>()//泛型参数,表示可以订阅到的 以及可以发布到的类型
//subject 当做observable 的时候
let sub1 = subject.subscribe(
onNext:{print("aa",$0)}
)
//subject 当做observer 的时候
subject.onNext("1")
sub1.dispose()//取消订阅
//PublishSubject 执行的是会员制 只会把消息发送给消息之前的订阅者,一旦取消订阅,则不发送
let sub2 = subject.subscribe(
onNext:{print("bb",$0)}
)
subject.onNext("2")
subject.onNext("3")
sub2.dispose()//取消订阅
subject.onNext("4")
BehaviorSubject
//从会员制 变成 试用制
let subject = BehaviorSubject<String>(value: "RxSwift step by step")
//value 表示没有发生事件时 给订阅者默认发送的内容 当事件已经发生过一次,当订阅时没有发生时间,返回最近的一次的历史事件
let sub1 = subject.subscribe(
onNext:{print("aa",$0)}
)
subject.onNext("1")
sub1.dispose()//取消订阅
let sub2 = subject.subscribe(
onNext:{print("bb",$0)}
)
subject.onNext("2")
subject.onNext("3")
sub2.dispose()//取消订阅
subject.onNext("4")
ReplaySubject
let subject = ReplaySubject<String>.create(bufferSize: 2)
//控制发送给订阅者历史事件的范围
//订阅空的subject不会受到任何消息,这一点和PublishSubject非常相似
//其次,它自带一个缓冲区,当有人订阅他的时候,会发送缓冲区指定数量的历史事件
subject.onNext("2")
subject.onNext("3")
let sub1 = subject.subscribe(
onNext:{print("aa",$0)}
)
subject.onNext("4")
sub1.dispose()
let sub2 = subject.subscribe(
onNext:{print("aa",$0)}
)
sub2.dispose()
Variable
//声明
let stringVariable = Variable.init("epɪsəʊd")
//最为被订阅者
let sub1 = stringVariable.asObservable().subscribe({print($0)})
stringVariable.value = "123"
print(stringVariable.value)
//绝对不会onError
//每一次都是onNext 之后自动调用onCompleted 所有不能手动发送onCompleted事件表示事件,否则会导致编译错误
}