RxSwift -- 變換

weixin_34146805發表於2017-09-20

如果我們想對獲取到的事件進行轉換, 我們就需要變換, 例如將一個數字變為字元

map

和陣列的 map 類似,可以將型別進行轉換

Observable.from([1,2,3,4,5])
    .map{"num is :\($0)"}
    .subscribe { (event) in
    self.print(event)
    }.disposed(by: disposeBag)

flatMap

flatMap 可以將一個一個可觀察者物件轉換為另一個, 例如, 你在某種情況下返回失敗你可以這樣

Observable.of(1,2,3,4,5)
    .flatMap{ $0 == 3 ? Observable<Int>.error(RxError.unknown) : Observable<Int>.just($0) }
    .subscribe { (event) in
        self.print(event)
    }.disposed(by: disposeBag)

scan

scan 類似於序列的 reduce 操作, 不同的是, 他會把每次的值都傳送出來

Observable.of(1,2,3,4,5)
    .scan(0) { $0 + $1 }
    .subscribe { (event) in
        self.print(event)
    }.disposed(by: disposeBag)

輸出 1, 3, 6, 10, 15

相關文章