RxSwift - Combination Operators

Combination Operators 將多個 Observable 組合成單個 Observable 運算符。 startWith 開始從某個 Observable 發出元素之前發出指定的元素序列。 每個連續的 startWith 元素都將在前一個 startWith 元素之前添加。 let disposeBag = DisposeBag() Observable.of("A", "B", "C", "D") .startWith("1") .startWith("a", "b", "c") .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) 印出結果 a b c 1 A B C D merge zip combineLatest switchLatest withLatestFrom

2022-02-17 20:35 · 1 min · Tientien

RxSwift - take、distinctUntilChanged

take 從 Observable 中發出頭 n 個元素,忽略後面的元素直到序列結束。 let disposeBag = DisposeBag() Observable.of("🐱", "🐰", "🐶", "🐸", "🐷", "🐵") .take(3) .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) 印出結果 🐱 🐰 🐶 distinctUntilChanged 阻止 Observable 發出相同的元素。如果後一個元素和前一個元素相同,將不會發出來,若後一個元素和前一個元素不同才會被發出來。 let disposeBag = DisposeBag() Observable.of("🐱", "🐷", "🐱", "🐱", "🐱", "🐵", "🐱") .distinctUntilChanged() .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) 印出結果 🐱 🐷 🐱 🐵 🐱

2022-02-14 17:35 · 1 min · Tientien

RxSwift - combineLatest、skip、do

combineLatest 將多個 Observables 中最新的元素透過一個函數組合起來,然後將結果發出來。 let disposeBag = DisposeBag() let first = PublishSubject<String>() let second = PublishSubject<String>() Observable.combineLatest(first, second) { $0 + $1 } .dubscribe(onNext: { print($0) }) .disposed(by: disposeBag) first.onNext("1") second.onNext("A") first.onNext("2") second.onNext("B") second.onNext("C") second.onNext("D") first.onNext("3") first.onNext("4") 印出結果 1A 2A 2B 2C 2D 3D 4D skip 跳過 Observable 中頭 n 個元素 do 使用 do 來監聽事件的生命週期,它會在每一次事件發送前被調用。 它和 subscribe 一樣,可以通過不同的閉包回調不同類型的事件。 如:do(onNext: ) 在 subscribe(onNext:) 前,do(onCompleted:) 在 subscribe(onCompleted:) 前調用。 let observable = Observable....

2022-02-13 17:35 · 1 min · Tientien

RxSwift - Subjects

Subjects 同時是 Observable 也是 Observer Publish Subject 訂閱之後才會收到發出的事件。 let subject = PublishSubject<String>() /// Issue 1 在訂閱之前收不到 subject.onNext("Issue 1") subject.subscribe { event in print(event) } subject.onNext("Issue 2") subject.dispose() /// Issue 3 在dispose之後收不到 subject.onNext("Issue 3") /// 印出結果 next(Issue 2) let subject = PublishSubject<String>() /// Issue 1 在訂閱之前收不到 subject.onNext("Issue 1") subject.subscribe { event in print(event) } subject.onNext("Issue 2") subject.onCompleted() /// Issue 3 在completed之後收不到 subject.onNext("Issue 3") /// 印出結果 next(Issue 2) completed Behavior Subject 需給定初始值,因爲訂閱它時,會得到初始值或訂閱前最後一個值。...

2022-02-05 12:15 · 2 min · Tientien

RxSwift - Observable 可監聽序列

每一個 Observable 就只是一個序列(Sequence)而已。 subscribe 一個 observable,以訂閱UISlider為例,當滑動UISlider時值改變就會通知訂閱(subscride)的人。 建立Observables 建立一個只有一個 element,值為1的observable let observable = Observable.just(1) 建立一個三個element,型別為int的observable let observable2 = Observable.of(1,2,3) 建立一個只有一個element,為int陣列的observable let observable3 = Observable.of([1,2,3]) 用from遍歷陣列中每一個element,相當於observable2 let observable4 = Observable.from([1,2,3]) 建立Subscriptions observable4.subscribe { event in print(event) } /// 印出結果 next(1) next(2) next(3) completed /// 取得Observable中的值 observable4.subscribe { event in if let element = event.element { print(element) } } /// 較簡易取得element的方法 observable4.subscribe(onNext: { element in print(element) }) /// 印出結果 1 2 3 observable3.subscribe { event in print(event) } /// 印出結果 next([1, 2, 3]) completed 取得Observable中的值...

2022-02-05 10:15 · 1 min · Tientien