iOS-Rx

RxSwift四:TransformingOperators

2018-04-26  本文已影响12人  狂奔的胖蜗牛

RxSwift练习:https://github.com/flywo/RxSwiftPractice

toArray

//toArray:将一个被观察队列组装成一个数组,通过一个next方法,将该数组发送出去
        let disposeBag = DisposeBag()
        Observable.of("a", "b", "c")
            .toArray()
            .subscribe(onNext: {print($0)})
            .disposed(by: disposeBag)
        //["a", "b", "c"]

map

let formatter = NumberFormatter()
        formatter.numberStyle = .spellOut
        Observable<NSNumber>.of(123, 4, 56)
            .map {formatter.string(from: $0) ?? ""}
            .subscribe(onNext: {print($0)})
            .disposed(by: disposeBag)
        /*
         one hundred twenty-three
         four
         fifty-six
         */

enumerated

Observable.of(1,2,3,4,5,6)
            //生成index + element的元组
            .enumerated()
            .map{ index, integer in
                index > 2 ? integer * 2 : integer
            }
            .subscribe(onNext: {print($0)})
            .disposed(by: disposeBag)
        /*
         1
         2
         3
         8
         10
         12
         */

flatMap

        struct Student {
            var score: BehaviorSubject<Int>
        }
        //flatMap
        let a = Student(score: BehaviorSubject(value: 80))
        let b = Student(score: BehaviorSubject(value: 90))
        let student = PublishSubject<Student>()

        student
            .flatMap {$0.score}
            .subscribe(onNext: {print($0)})
            .disposed(by: disposeBag)

        student.onNext(a)
        //80
        a.score.onNext(90)
        //90
        student.onNext(b)
        //90
        b.score.onNext(80)
        //80
        a.score.onNext(100)
        //100

flatMapLatest

        let student1 = PublishSubject<Student>()
        //flatMapLatest保持最后的观察者和被观察者
        student1
            .flatMapLatest {$0.score}
            .subscribe(onNext: {print($0)})
            .disposed(by: disposeBag)
        student1.onNext(a)
        //80
        a.score.onNext(90)
        //90
        student1.onNext(b)
        //90
        b.score.onNext(80)
        //80
        a.score.onNext(100)
        //无
        //改变发送的事件
        let student1 = BehaviorSubject(value: a)
        enum MyError: Error {
            case anError
        }
        let studentScore = student1
            //materialize
            .flatMapLatest{$0.score.materialize()}
        studentScore
            .subscribe(onNext: {print($0)})
            .disposed(by: disposeBag)
        a.score.onNext(85)
        a.score.onError(MyError.anError)
        a.score.onNext(90)
        student1.onNext(b)
        /*
         next(80)
         next(85)
         error(anError)
         next(90)
        */
上一篇下一篇

猜你喜欢

热点阅读