RxSwift Observable的創建

Observable的創建

常用的爲:deferred、of、just

  • empty
        //------   empty   ------
        //MARK: empty
        //空序列,只能completed
        let emptyOb = Observable<Int>.empty()
        _ = emptyOb.subscribe(onNext: { (number) in
            print("訂閱:", number)
        }, onError: { (error) in
            print("error:", error)
        }, onCompleted: {
            print("completed")
        }, onDisposed: {
            print("disposed")
        })
  • just
        //------   just   ------
        //MARK: just
        //單個信號序列
        let array = ["a", "b", "c", "d", "e"]
        Observable<[String]>.just(array)
            .subscribe { (event) in
                print(event)
        }.disposed(by: disposeBag)
        
        _ = Observable<[String]>.just(array)
            .subscribe(onNext: { (number) in
                print("訂閱:", number)
            }, onError: { (error) in
                print("error:", error)
            }, onCompleted: {
                print("completed")
            }, onDisposed: {
                print("disposed")
            })
  • of
        //------   of   ------
        //MARK: of
        //多個元素
        Observable<String>.of("a", "b")
            .subscribe { (event) in
                print(event)
        }.disposed(by: disposeBag)
        
        //字典
        Observable<[String: Any]>.of(["name": "aa", "age": 18])
            .subscribe { (event) in
                print(event)
        }.disposed(by: disposeBag)
        
        //數組
        Observable<[String]>.of(["a", "b", "c"])
            .subscribe { (event) in
                print(event)
            }.disposed(by: disposeBag)
  • from
        //------   from   ------
        //MARK: from
        //從集合中獲取序列,有可選項
        Observable<[String]>.from(optional: ["a", "b"])
            .subscribe { (event) in
                print(event)
        }.disposed(by: disposeBag)
        
        //------   deferred   ------
        //MARK: deferred
        //根據條件判斷業務邏輯,根據業務選擇序列
        var isOdd = true
        _ = Observable<Int>.deferred({ () -> Observable<Int> in
            isOdd = !isOdd
            if isOdd {
                return Observable.of(1, 3, 5, 7, 9)
            }
            return Observable.of(0, 2, 4, 6, 8)
        })
            .subscribe({ (event) in
                print(event)
            })
  • range
        //------   range   ------
        //MARK: range
        //生成指定範圍內的可觀察整數序列
        Observable.range(start: 2, count: 5)
            .subscribe { (event) in
                print(event)
        }.disposed(by: disposeBag)
  • generate
        //------   generate   ------
        //MARK: generate
        //當所有條件都爲true時纔給出Observable序列,類似數組遍歷循環
        Observable.generate(initialState: 0,  //初始值
                            condition: { $0 < 10 },  //條件1
                            iterate: { $0 + 2 })  //條件2
            .subscribe { (event) in
                print(event)
        }.disposed(by: disposeBag)
        
        //數組遍歷
        let arr = ["aa", "bb", "cc", "dd", "ee", "ff"]
        Observable.generate(initialState: 0,
                            condition: { $0 < arr.count },
                            iterate: { $0 + 1 })
            .subscribe { (event) in
                print(event)
        }.disposed(by: disposeBag)
  • timer
        //------   timer   ------
        //MARK: timer
        //para1:第一次響應距離現在的時間;para2:時間間隔;para3:線程
        Observable<Int>.timer(5, period: 2, scheduler: MainScheduler.instance)
            .subscribe { (event) in
                print(event)
            }
            .disposed(by: disposeBag)
        
        //沒有指定period,爲一次性執行
        Observable<Int>.timer(2, scheduler: MainScheduler.instance)
            .subscribe { (event) in
                print(event)
            }
            .disposed(by: disposeBag)
  • interval
        //------   interval   ------
        //MARK: interval
        //從當前時間開始
        Observable<Int>.interval(2, scheduler: MainScheduler.instance)
            .subscribe { (event) in
                print(event)
            }
            .disposed(by: disposeBag)
  • repeatElement
        //------   repeatElement   ------
        //MARK: repeatElement
        //創建一個可以無限發出給定元素的Event的Observable序列,永不終止
        Observable<Int>.repeatElement(5)
            .subscribe { (event) in
                print(event)
            }
            .disposed(by: disposeBag)
  • error
        //------   error   ------
        //MARK: error
        //發出錯誤信號
        Observable<String>.error(NSError.init(domain: "error", code: 1002, userInfo: ["reason": "unknow"]))
            .subscribe { (event) in
                print(event)
            }
            .disposed(by: disposeBag)
  • never
        //------   never   ------
        //MARK: never
        //創建永遠不會發出也不會終止的Observable序列;
        //這種類型的響應源,在測試或者組合操作符中禁用確切的源很有用
        Observable<String>.never()
            .subscribe { (event) in
                print(event)
            }
            .disposed(by: disposeBag)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章