04.RxSwift Observable建立

Observable建立的方法

1.empty()
  • 首先來一個空的序列-原本序列事件是Int類型的,這裏調用emty函數 沒有序列,只能complete
// 首先來一個空的序列 - 原本序列事件是Int類型的,這裏調用emty函數 沒有序列,只能complete
        print("********emty********")
        let emtyOb = Observable<Int>.empty()
        _ = emtyOb.subscribe(onNext: { (number) in
            print("訂閱:",number)
        }, onError: { (error) in
            print("error:",error)
        }, onCompleted: {
            print("完成回調")
        }) {
            print("釋放回調")
        }
複製代碼
2.just
  • 單個信號序列建立
// 單個信號序列建立
       let array = ["LiHua","LiMing"]
       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("完成回調")
       }) {
           print("釋放回調")
       }
複製代碼
3.of
  • 多個元素 - 針對序列處理
// 多個元素 - 針對序列處理
        Observable<String>.of("LiHua","LiMiing")
            .subscribe { (event) in
                print(event)
            }.disposed(by: disposeBag)
        
        // 字典
        Observable<[String: Any]>.of(["name":"LiHua","age":18])
            .subscribe { (event) in
                print(event)
            }.disposed(by: disposeBag)
        
        // 數組
        Observable<[String]>.of(["LiHua","LiMiing"])
            .subscribe { (event) in
                print(event)
            }.disposed(by: disposeBag)
複製代碼
4.from
  • 從集合中獲取序列:數組,集合,set 獲取序列 - 有可選項處理 - 更安全
Observable<[String]>.from(optional: ["LiHua","LiMing"])
            .subscribe { (event) in
                print(event)
            }.disposed(by: disposeBag)
複製代碼
5.deferred
  • 這裏有一個需求:動態序列 - 根據外界的標識 - 動態輸出
  • 使用deferred()方法延遲Observable序列的初始化,經過傳入的block來實現Observable序列的初始化而且返回
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)
            }
複製代碼
6.rang
  • 生成指定範圍內的可觀察整數序列
/ /生成指定範圍內的可觀察整數序列。
        Observable.range(start: 2, count: 5)
            .subscribe { (event) in
                print(event)
            }.disposed(by: disposeBag)
複製代碼
7.generate
  • 該方法建立一個只有當提供的全部的判斷條件都爲 true 的時候,纔會給出動做的 Observable 序列。
  • 初始值給定 而後判斷條件1 再判斷條件2 會一直遞歸下去,直到條件1或者條件2不知足
  • 相似 數組遍歷循環
Observable.generate(initialState: 0,// 初始值
                            condition: { $0 < 10}, // 條件1
                            iterate: { $0 + 2 })  // 條件2 +2
            .subscribe { (event) in
                print(event)
            }.disposed(by: disposeBag)
        
        // 數組遍歷
        let arr = ["LiHua_1","LiHua_2","LiHua_3","LiHua_4","LiHua_5","LiHua_6","LiHua_7","LiHua_8","LiHua_9","LG_LiHua_10"]
        Observable.generate(initialState: 0,// 初始值
            condition: { $0 < arr.count}, // 條件1
            iterate: { $0 + 1 })  // 條件2 +2
            .subscribe(onNext: {
                print("遍歷arr:",arr[$0])
            })
            .disposed(by: disposeBag)
複製代碼
8.timer
  • 第一次參數:第一次響應距離如今的時間
  • 第二個參數:時間間隔
  • 第三個參數:線程
Observable<Int>.timer(5, period: 2, scheduler: MainScheduler.instance)
            .subscribe { (event) in
                print(event)
            }
        .disposed(by: disposeBag)

        // 由於沒有指按期限period,故認定爲一次性
        Observable<Int>.timer(1, scheduler: MainScheduler.instance)
            .subscribe { (event) in
                print("111111111 \(event)")
            }
            //.disposed(by: disposeBag)
        
複製代碼
9.interval
  • 定時器
Observable<Int>.interval(1, scheduler: MainScheduler.instance)
            .subscribe { (event) in
                print(event)
            }
            //.disposed(by: disposeBag)
        
複製代碼
10.repeatElement
  • 該方法建立一個能夠無限發出給定元素的 EventObservable 序列(永不終止)
Observable<Int>.repeatElement(5)
            .subscribe { (event) in
                // print("訂閱:",event)
            }
            .disposed(by: disposeBag)
複製代碼
11.error
  • 對消費者發出一個錯誤信號
Observable<String>.error(NSError.init(domain: "lgerror", code: 10086, userInfo: ["reason":"unknow"]))
            .subscribe { (event) in
                print("訂閱:",event)
            }
            .disposed(by: disposeBag)
複製代碼
12.never
  • 該方法建立一個永遠不會發出 Event(也不會終止)的 Observable 序列
  • 這種類型的響應源 在測試或者在組合操做符中禁用確切的源很是有用
Observable<String>.never()
            .subscribe { (event) in
                print("走了",event)
            }
            .disposed(by: disposeBag)
複製代碼

總結:

相關文章
相關標籤/搜索