Observable介紹,創(chuàng)建可觀察序列


import UIKit
import RxSwift
import RxCocoa
class ObservableViewController: UIViewController {

    enum MyError:Error {
        case A
        case B
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
    }
    func demo13(){
        // 這個(gè)方法有兩種用法,一種是創(chuàng)建的Observable序列在經(jīng)過設(shè)定的一段時(shí)間后,產(chǎn)生唯一的一個(gè)元素(也就是只發(fā)送一次)
        let observable = Observable<Int>.timer(2, scheduler: MainScheduler.instance)
        observable.subscribe{ event in
            print(event)
        }
        
//        // 創(chuàng)建一個(gè):經(jīng)過設(shè)定的一段時(shí)間,每隔一段時(shí)間產(chǎn)生一個(gè)元素
//        let observable = Observable<Int>.timer(2, period: 1, scheduler: MainScheduler.instance)
//        observable.subscribe{ event in
//            print(event)
//        }
        
    }
    
    func demo12(){
        // 創(chuàng)建interval(定時(shí)器)每隔一段設(shè)定時(shí)間,會(huì)發(fā)出一個(gè)索引的元素.而且他會(huì)一直發(fā)送下去
        let observable = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
        observable.subscribe{ event in
            print(event)
        }
    }
    func demo11(){
        // 相當(dāng)于是創(chuàng)建一個(gè)Observable工廠,通過傳入一個(gè)block來執(zhí)行延遲observable序列創(chuàng)建的行為,而這個(gè)block里就是真正的實(shí)例化序列對(duì)象的地方
        
        // 用于標(biāo)記是基數(shù),還是偶數(shù)
        var isOdd = true
        // 使用deferred()方法延遲Observable序列的初始化,傳入的block來實(shí)現(xiàn)Observable序列的初始化并且返回
        let factory:Observable<Int> = Observable.deferred {
            // 讓每次執(zhí)行這個(gè)block時(shí)候都會(huì)讓奇偶進(jìn)行交替
            isOdd = !isOdd
            if isOdd{
                return Observable.of(1,2)
            }else{
                return Observable.of(3,4)
            }
        }
        // 訂閱測(cè)試
        factory.subscribe{ event in
            print(event)
        }
        
        factory.subscribe{event in
            print(event)
        }
    }
    
    
    func demo10(){
        // 創(chuàng)建observable
        let observable = Observable<String>.create { (observable) -> Disposable in
            // 對(duì)訂閱者發(fā)出了.next事件,且攜帶一個(gè)數(shù)據(jù)"123"
            observable.onNext("123")
            // 對(duì)訂閱者發(fā)出了.completed
            observable.onCompleted()
            // 因?yàn)橐粋€(gè)訂閱行為會(huì)有一個(gè)Disposeable類型的返回值,所以在結(jié)尾一定要return
            return Disposables.create()
        }
        // 訂閱observable
        observable.subscribe(onNext: { (event) in
            print(event)
        })
        observable.subscribe{
            print($0)
        }
        observable.subscribe{
            print($0)
        }
    }
    func demo9(){
        // 創(chuàng)建一個(gè)只有當(dāng)所有的判斷條件為True的時(shí)候,才會(huì)給出動(dòng)作的Observable
        let observable = Observable.generate(initialState: 0, condition: {
            $0 <= 10
        }) {
            $0 + 2
        }
        observable.subscribe(onNext: { (event) in
            print(event)
        }).disposed(by: rx_disposeBag)
    }
    func demo8(){
        // 創(chuàng)建一個(gè)可以無(wú)限發(fā)出給定元素的Event的Observable序列
        let observable = Observable.repeatElement(1)
        observable.subscribe(onNext: { (event) in
            print(event)
        }).disposed(by: rx_disposeBag)
    }
    
    func demo7(){
        // 創(chuàng)建一個(gè)一這個(gè)范圍內(nèi)所有制作為初始值的Observable序列
        let observable = Observable.range(start: 1, count: 4)
    }
    func demo6(){
        // 直接發(fā)送一個(gè)錯(cuò)誤的Observable序列
        let observable = Observable<Int>.error(MyError.A)
    }
    func demo5(){
        // 創(chuàng)建一個(gè)永遠(yuǎn)不會(huì)發(fā)出event的序列
        let observable = Observable<Int>.never()
    }
    func demo4(){
        // 創(chuàng)建一個(gè)空內(nèi)容的Observable序列
        let observable = Observable<Int>.empty()
    }
    func demo3(){
        //1 該方法需要一個(gè)數(shù)組參數(shù)
        let observable = Observable.from(["A","B","C","D"])
    }
    func demo2(){
        //1 該方法可以接受可變數(shù)量的參數(shù)(必須要是同類型)
        //2 我們沒有顯示地聲明Observable 的泛型,swift也會(huì)自動(dòng)推到
        let observable = Observable.of("A","B")
        observable.subscribe(onNext: { (event) in
            print(event)
        }).disposed(by: rx_disposeBag)
    }
    func demo1(){
        //1 該方法通過傳入一個(gè)默認(rèn)值來初始化
        //2 observable的類型為Observable<Int> 指定Observable攜帶的數(shù)據(jù)類型必須是Int類型的
        let observable = Observable<Int>.just(5)
        print(observable)
        observable.subscribe(onNext: { (event) in
            print(event)
        }).disposed(by: rx_disposeBag)
    }
    


}

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

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

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