RxSwift Observable的創(chuàng)建

Observable的創(chuàng)建

常用的為: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
        //單個(gè)信號(hào)序列
        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
        //多個(gè)元素
        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)
        
        //數(shù)組
        Observable<[String]>.of(["a", "b", "c"])
            .subscribe { (event) in
                print(event)
            }.disposed(by: disposeBag)
  • from
        //------   from   ------
        //MARK: from
        //從集合中獲取序列匀奏,有可選項(xiàng)
        Observable<[String]>.from(optional: ["a", "b"])
            .subscribe { (event) in
                print(event)
        }.disposed(by: disposeBag)
        
        //------   deferred   ------
        //MARK: deferred
        //根據(jù)條件判斷業(yè)務(wù)邏輯蛔翅,根據(jù)業(yè)務(wù)選擇序列
        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
        //生成指定范圍內(nèi)的可觀察整數(shù)序列
        Observable.range(start: 2, count: 5)
            .subscribe { (event) in
                print(event)
        }.disposed(by: disposeBag)
  • generate
        //------   generate   ------
        //MARK: generate
        //當(dāng)所有條件都為true時(shí)才給出Observable序列瓶殃,類似數(shù)組遍歷循環(huán)
        Observable.generate(initialState: 0,  //初始值
                            condition: { $0 < 10 },  //條件1
                            iterate: { $0 + 2 })  //條件2
            .subscribe { (event) in
                print(event)
        }.disposed(by: disposeBag)
        
        //數(shù)組遍歷
        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:第一次響應(yīng)距離現(xiàn)在的時(shí)間充包;para2:時(shí)間間隔;para3:線程
        Observable<Int>.timer(5, period: 2, scheduler: MainScheduler.instance)
            .subscribe { (event) in
                print(event)
            }
            .disposed(by: disposeBag)
        
        //沒有指定period,為一次性執(zhí)行
        Observable<Int>.timer(2, scheduler: MainScheduler.instance)
            .subscribe { (event) in
                print(event)
            }
            .disposed(by: disposeBag)
  • interval
        //------   interval   ------
        //MARK: interval
        //從當(dāng)前時(shí)間開始
        Observable<Int>.interval(2, scheduler: MainScheduler.instance)
            .subscribe { (event) in
                print(event)
            }
            .disposed(by: disposeBag)
  • repeatElement
        //------   repeatElement   ------
        //MARK: repeatElement
        //創(chuàng)建一個(gè)可以無限發(fā)出給定元素的Event的Observable序列基矮,永不終止
        Observable<Int>.repeatElement(5)
            .subscribe { (event) in
                print(event)
            }
            .disposed(by: disposeBag)
  • error
        //------   error   ------
        //MARK: error
        //發(fā)出錯(cuò)誤信號(hào)
        Observable<String>.error(NSError.init(domain: "error", code: 1002, userInfo: ["reason": "unknow"]))
            .subscribe { (event) in
                print(event)
            }
            .disposed(by: disposeBag)
  • never
        //------   never   ------
        //MARK: never
        //創(chuàng)建永遠(yuǎn)不會(huì)發(fā)出也不會(huì)終止的Observable序列淆储;
        //這種類型的響應(yīng)源,在測試或者組合操作符中禁用確切的源很有用
        Observable<String>.never()
            .subscribe { (event) in
                print(event)
            }
            .disposed(by: disposeBag)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末家浇,一起剝皮案震驚了整個(gè)濱河市本砰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钢悲,老刑警劉巖点额,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異莺琳,居然都是意外死亡还棱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門惭等,熙熙樓的掌柜王于貴愁眉苦臉地迎上來珍手,“玉大人,你說我怎么就攤上這事辞做×找” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵秤茅,是天一觀的道長稚补。 經(jīng)常有香客問我,道長框喳,這世上最難降的妖魔是什么课幕? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮帖努,結(jié)果婚禮上撰豺,老公的妹妹穿的比我還像新娘。我一直安慰自己拼余,他們只是感情好污桦,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著匙监,像睡著了一般凡橱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上亭姥,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天稼钩,我揣著相機(jī)與錄音,去河邊找鬼达罗。 笑死坝撑,一個(gè)胖子當(dāng)著我的面吹牛静秆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播巡李,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼抚笔,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了侨拦?” 一聲冷哼從身側(cè)響起殊橙,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狱从,沒想到半個(gè)月后膨蛮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡季研,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年敞葛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片训貌。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡制肮,死狀恐怖冒窍,靈堂內(nèi)的尸體忽然破棺而出递沪,到底是詐尸還是另有隱情,我是刑警寧澤综液,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布款慨,位于F島的核電站,受9級(jí)特大地震影響谬莹,放射性物質(zhì)發(fā)生泄漏檩奠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一附帽、第九天 我趴在偏房一處隱蔽的房頂上張望埠戳。 院中可真熱鬧,春花似錦蕉扮、人聲如沸整胃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屁使。三九已至,卻和暖如春奔则,著一層夾襖步出監(jiān)牢的瞬間蛮寂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工易茬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留酬蹋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像范抓,于是被迫代替她去往敵國和親写半。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345