RxSwift 简单操作符

更新一些常用的简单操作符,后续还有一部分高阶函数的探索


 //MARK: empty

    funcemptyTest() {

        //empty() 空判断,判断序列是否为空

        letemptyObservable =Observable.empty()

        emptyObservable.subscribe{ numberin

            print("empty - number = \(number)")

        }onError: { errorin

            print(error)

        }onCompleted: {

            print("completed")

        } onDisposed: {

            print("release!")

        }

       .disposed(by: disposeBag)

        emptyObservable.subscribe{ numberin

            print("empty - number = \(number)")

        }.disposed(by: disposeBag)



        emptyObservable.subscribe(onNext: {numberin

            print("empty - number = \(number)")

        }).disposed(by: disposeBag)





    }

    //MARK: just

    funcjustTest() {

        // just 单次信号序列 ,只会调用一次

        letarray = ["A","B","C"]

        letjustObservable =Observable<[String]>.just(array)

        justObservable.subscribe{eventin

                print(event)

            }

            .disposed(by: disposeBag)

        justObservable.subscribe{ sArrayin

            print(sArray)

        }onError: { errorin

            print(error)

        }onCompleted: {

            print("completed")

        } onDisposed: {

            print("release!")

        }.disposed(by: disposeBag)

        justObservable.subscribe(onNext: {sArrayin

            print("subscribe(onNext: \(sArray)")

        }).disposed(by: disposeBag)

    }

    //MARK: of 多个元素的处理,

    funcofTest() {

        // 单个元素

        Observable.of("A","B","C")

            .subscribe{ eventin

                print(event)

            }

            .disposed(by: disposeBag)

        // 字典

        Observable<[String:Any]>.of(["name":"H_Max","age":29,"length":18.5])

            .subscribe{eventin

                print(event)

            }

            .disposed(by: disposeBag)

        // 数组

        Observable<[String]>.of(["琴","棋","书","画"])

            .subscribe{ eventin

                print(event)

            }.disposed(by: disposeBag)

    }

    //MARK:  from

    funcfromTest() {

        //从集合中获取序列:数组,集合,set 获取序列 - 有可选项处理

        Observable<[String]>.from(optional: ["刀","枪","棍","棒"])

            .subscribe{ eventin

                print(event)

            }.disposed(by: disposeBag)

    }

    //MARK:  defer

    func deferredTest(){

        // 动态序列 - 根据外界的标识 - 动态输出

        // 这里两次订阅,通过外界的值来 选择性的输出不同的结果

        varisOne =true

        letob =Observable.deferred{() ->Observablein

             isOne = !isOne

             guardisOneelse{

                 returnObservable.of(1,2,3,4,5)

             }

             returnObservable.of(10,9,8,7,6)

        }

        ob.subscribe{ eventin

            print(event)

        }.disposed(by: disposeBag)



        ob.subscribe{ evnetin

            print(evnet)

        }

        .disposed(by: disposeBag)

    }

    //MARK:  rang

    func rangeTest(){

        // 传入开始值和数量,生成从开始值后面数量个的整数

        Observable.range(start:11,count:15)

        .subscribe{ eventin

                print(event)

        }.disposed(by: disposeBag)



    }

    //MARK:  generate

    func generateTest(){

        // 遍历循环,int i = 1 ;i < 10 ; i += 3 print(i)

        // 只有两个值都为true的时候,输出这个序列

        // 利用generate可以实现数组的遍历

        // i 用来做数组的下标 condition $0 < 数组的count iterate $0 + 1

        // 订阅的话  event.element 或者用 subscribe(onNext:{})订阅

        Observable.generate(initialState: 1,

                            condition: {$0 <10},

                            iterate: {$0 +3})

        .subscribe{ eventin



                print(event)

        }.disposed(by: disposeBag)

    }

    //MARK:  interval && timer

    func intervalTest(){

        // 定时器

        // timer 和 interval的区别就是,timer多了一个初始延迟

        Observable<Int>.interval(.seconds(2), scheduler: MainScheduler.instance)

            .subscribe{ eventin

                print(event)

            }.disposed(by: disposeBag)

        Observable.timer(.seconds(10),period: .seconds(1),scheduler:MainScheduler.instance)

            .subscribe{ eventin

                print(event)

            }.disposed(by: disposeBag)

    }

    //MARK:  repeatElement

    func repeatElementTest(){

        // 一直持续发出给定元素,除非disposeBag回收,否则不会停止

        // 实用场景,例如打飞机中的子弹,飞机不爆,子弹不停

        Observable.repeatElement("大")

            .subscribe{ eventin

                print(event)

            }.disposed(by: disposeBag)

    }

    //MARK:  error

    func errorTest(){

        // 发送一个error的信号,直接在onError 中可以接收到

        Observable.error(NSError.init(domain:"error",code:9999,userInfo: ["reason":"unknow"]))

            .subscribe{ strin

                print(str)

            }onError: { errorin

                print("error9999 = \(error)")

            }onCompleted: {

                print("completed")

            } onDisposed: {

            }.disposed(by: disposeBag)

//            .subscribe { event in

//                print("订阅:", event)

//            }

//            .disposed(by: disposeBag)

    }

    //MARK:  never

    func neverTest(){

        // 永远不会发出event的一个序列, Observable 不会产生任何事件

        // 等价于

        // Observable.create { observer in

        //      return Disposables.create()

        // }

       Observable.never()

            .subscribe{ eventin

                print("一动不动是什么", event)

            }

            .disposed(by: disposeBag)

    }

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容