1.RxSwift常見操作
never
-
never就是創(chuàng)建一個sequence砸紊,但是不發(fā)出任何事件信號囱挑。
let bag : DisposeBag = DisposeBag()
let neverObser = Observable<String>.never()
neverObser.subscribe { (event : Event<String>) in
print(event)
}.addDisposableTo(bag)
empty
-
empty就是創(chuàng)建一個空的sequence,只能發(fā)出一個completed事件
let disposeBag = DisposeBag()
Observable<Int>.empty()
.subscribe { event in
print(event)
}
.addDisposableTo(disposeBag)
just
-
just是創(chuàng)建一個sequence只能發(fā)出一種特定的事件平挑,能正常結束
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是創(chuàng)建一個sequence能發(fā)出很多種事件信號
let bag : DisposeBag = DisposeBag()
let ofObser = Observable.of("a", "b", "c")
ofObser.subscribe { (event : Event<String>) in
print(event)
}.addDisposableTo(bag)
from
- from就是從數組中創(chuàng)建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就是創(chuàng)建一個sequence,他會發(fā)出這個范圍中的從開始到結束的所有事件
Observable.range(start: 1, count: 10)
.subscribe { (event : Event<Int>) in
print(event)
}.addDisposableTo(bag)
repeatElement
-
創(chuàng)建一個sequence,發(fā)出特定的事件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嗡贺,它既可以發(fā)出事件,也可以監(jiān)聽事件诫睬。
PublishSubject
-
當你訂閱PublishSubject的時候,你只能接收到訂閱他之后發(fā)生的事件续徽。subject.onNext()發(fā)出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的時候仰担,你可以接收到訂閱他之后的事件,也可以接受訂閱他之前發(fā)出的事件摔蓝,但是接受幾個事件取決與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
- 如果要發(fā)出事件,不在使用onNext锡垄,直接修改value
- 如果事件結束,會自動發(fā)出一個completed事件
let variable = Variable("1")
variable.asObservable().subscribe { (event) in
print(event)
}.addDisposableTo(bag)
variable.value = "2"
ariable.value = "3"