1.RxSwift常见操作
never
-
never就是创建一个sequence,但是不发出任何事件信号。
let bag : DisposeBag = DisposeBag()
let neverObser = Observable<String>.never()
neverObser.subscribe { (event : Event<String>) in
print(event)
}.addDisposableTo(bag)
empty
-
empty就是创建一个空的sequence,只能发出一个completed事件
let disposeBag = DisposeBag()
Observable<Int>.empty()
.subscribe { event in
print(event)
}
.addDisposableTo(disposeBag)
just
-
just是创建一个sequence只能发出一种特定的事件,能正常结束
let bag : DisposeBag = DisposeBag()
let justObser = Observable.just("swift")
justObser.subscribe { (event : Event<String>) in
print(event)
}.addDisposableTo(bag)
justObser.subscribe(onNext: { (str : String) in
print(str)
}).addDisposableTo(bag)
of
- of是创建一个sequence能发出很多种事件信号
let bag : DisposeBag = DisposeBag()
let ofObser = Observable.of("a", "b", "c")
ofObser.subscribe { (event : Event<String>) in
print(event)
}.addDisposableTo(bag)
from
- from就是从数组中创建sequence
let fromObser = Observable.from([1, 2, 3])
fromObser.subscribe { (event : Event<Int>) in
print(event)
}.addDisposableTo(bag)
create
-
自定义可观察的sequence,那就是使用create
let createObser = Observable.create { (observer : AnyObserver<Any>) -> Disposable in
observer.onNext("lwg")
observer.onNext(18)
observer.onNext(1.88)
observer.onCompleted()
return Disposables.create()
}
createObser.subscribe { (event : Event<Any>) in
print(event)
}.addDisposableTo(bag)
range
-
range就是创建一个sequence,他会发出这个范围中的从开始到结束的所有事件
Observable.range(start: 1, count: 10)
.subscribe { (event : Event<Int>) in
print(event)
}.addDisposableTo(bag)
repeatElement
-
创建一个sequence,发出特定的事件n次
Observable
.repeatElement("hello world")
.take(3)
.subscribe { (event : Event<String>) in
print(event)
}
.addDisposableTo(bag)
2.RxSwift中Subjects
Subjects是什么?
- Subjet是observable和Observer之间的桥梁,一个Subject既是一个Obserable也是一个Observer,它既可以发出事件,也可以监听事件。
PublishSubject
-
当你订阅PublishSubject的时候,你只能接收到订阅他之后发生的事件。subject.onNext()发出onNext事件,对应的还有onError()和onCompleted()事件
let pubSub = PublishSubject<String>()
pubSub.onNext("a")
pubSub.onNext("b")
pubSub.subscribe { (event : Event<String>) in
print(event)
}.addDisposableTo(bag)
pubSub.onNext("c")
pubSub.onNext("d")
pubSub.onNext("e")
只能接受到c、d、e,订阅之前的a、b不能接受到
ReplaySubject
- 当你订阅ReplaySubject的时候,你可以接收到订阅他之后的事件,也可以接受订阅他之前发出的事件,但是接受几个事件取决与bufferSize的大小,如下bufferSize = 2,只接受两个b、c和订阅之后的事
//let replaySubs = ReplaySubject<String>.create(bufferSize: 2)
// 订阅之前的无论多少都能接受
let replaySubs = ReplaySubject<String>.createUnbounded()
replaySubs.onNext("a")
replaySubs.onNext("b")
replaySubs.onNext("c")
replaySubs.subscribe { (event) in
print(event)
}.addDisposableTo(bag)
replaySubs.onNext("e")
replaySubs.onNext("f")
BehaviorSubject
- 当你订阅了BehaviorSubject,你会接受到订阅之前的最后一个事件,和订阅之后的全部事件
let beSubs = BehaviorSubject(value: "a") // 默认值a
beSubs.onNext("b")
beSubs.onNext("c")
beSubs.subscribe { (event) in
print(event)
}.addDisposableTo(bag)
beSubs.onNext("d")
beSubs.onNext("e")
beSubs.onNext("f")
Variable
- 对BehaviorSubject进行了封装
- 如果要订阅Variable,必须先通过asObservable获取Observable
- 如果要发出事件,不在使用onNext,直接修改value
- 如果事件结束,会自动发出一个completed事件
let variable = Variable("1")
variable.asObservable().subscribe { (event) in
print(event)
}.addDisposableTo(bag)
variable.value = "2"
ariable.value = "3"