RxSwift 簡單操作符

更新一些常用的簡單操作符,后續(xù)還有一部分高階函數(shù)的探索


 //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 單次信號序列 ,只會調(diào)用一次

        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)

        // 數(shù)組

        Observable<[String]>.of(["琴","棋","書","畫"])

            .subscribe{ eventin

                print(event)

            }.disposed(by: disposeBag)

    }

    //MARK:  from

    funcfromTest() {

        //從集合中獲取序列:數(shù)組,集合,set 獲取序列 - 有可選項處理

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

            .subscribe{ eventin

                print(event)

            }.disposed(by: disposeBag)

    }

    //MARK:  defer

    func deferredTest(){

        // 動態(tài)序列 - 根據(jù)外界的標(biāo)識 - 動態(tài)輸出

        // 這里兩次訂閱,通過外界的值來 選擇性的輸出不同的結(jié)果

        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(){

        // 傳入開始值和數(shù)量,生成從開始值后面數(shù)量個的整數(shù)

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

        .subscribe{ eventin

                print(event)

        }.disposed(by: disposeBag)



    }

    //MARK:  generate

    func generateTest(){

        // 遍歷循環(huán),int i = 1 ;i < 10 ; i += 3 print(i)

        // 只有兩個值都為true的時候,輸出這個序列

        // 利用generate可以實現(xiàn)數(shù)組的遍歷

        // i 用來做數(shù)組的下標(biāo) condition $0 < 數(shù)組的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的區(qū)別就是,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(){

        // 一直持續(xù)發(fā)出給定元素,除非disposeBag回收,否則不會停止

        // 實用場景,例如打飛機(jī)中的子彈,飛機(jī)不爆,子彈不停

        Observable.repeatElement("大")

            .subscribe{ eventin

                print(event)

            }.disposed(by: disposeBag)

    }

    //MARK:  error

    func errorTest(){

        // 發(fā)送一個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(){

        // 永遠(yuǎn)不會發(fā)出event的一個序列, Observable 不會產(chǎn)生任何事件

        // 等價于

        // Observable.create { observer in

        //      return Disposables.create()

        // }

       Observable.never()

            .subscribe{ eventin

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

            }

            .disposed(by: disposeBag)

    }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容