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"