美文网首页
RxSwift学习(Subject)

RxSwift学习(Subject)

作者: 林不改了 | 来源:发表于2017-08-08 13:41 被阅读0次

    推荐书本:RxSwift
    电子版地址:https://pan.baidu.com/s/1bp8MlC7 密码 5tjx
    本文是RxSwift书本 学习笔记
    书本code地址:https://pan.baidu.com/s/1o7GVBrO

    Subject 可以看做是一种代理和桥梁。它既是订阅者又是订阅源。
    作为一个观察者和观察者。您早就看到了他们如何接收事件并订阅。该主题接收到下一个事件,每次收到一个事件时,它都会将它发送给它的订阅者。

    当你订阅PublishSubject的时候,你只能接收到订阅他之后发生的事件。subject.onNext()发出onNext事件,对应的还有onError()和onCompleted()事件

    func writeSequenceToConsole<O: ObservableType>(name: String, sequence: O) {
        sequence
            .subscribe { e in
                print("Subscription: \(name), event: \(e)")
        }
    }
    
    example(of: "PublishSubject") {
        let subject = PublishSubject<String>()
        
    
        writeSequenceToConsole(name: "1", sequence: subject)
        
        subject.onNext("Is anyone Listeing?")
        subject.on(.next("1"))
        subject.on(.next("2"))
        
        writeSequenceToConsole(name: "2", sequence: subject)
        subject.onNext("Is anyone Listeing?")
        subject.on(.next("1"))
        subject.on(.next("2"))
        
    }
    
    红色为第一组,蓝色为第二组发送, 黄色箭头为 第二次发送发送的事件 被第一组接收

    ReplaySubject 在新的订阅对象订阅的时候会补发所有已经发送过的数据队列, bufferSize 是缓冲区的大小,决定了补发队列的最大值。如果 bufferSize 是1,那么新的订阅者出现的时候就会补发上一个事件,如果是2,则补两个,以此类推。(距观察,补发的事件是先进后出)

    ![Uploading image_072992.png . . .]
    
    example(of: "ReplaySubject") {
        let subject = ReplaySubject<String>.create(bufferSize: 1)
        
        writeSequenceToConsole(name: "1", sequence: subject)
        
        subject.onNext("Is anyone Listeing? 1")
        subject.on(.next("a"))
        subject.on(.next("b"))
        
        writeSequenceToConsole(name: "2", sequence: subject)
        subject.onNext("Is anyone Listeing? 2")
        subject.on(.next("c"))
        subject.on(.next("d"))
    }
    
    红蓝黄和上面一样, 紫色圈出来部分为

    ========================================

    BehaviorSubject
    BehaviorSubject 在新的订阅对象订阅的时候会发送最近发送的事件,如果没有则发送一个默认值。

    如图所示。

    ================================
    Variable
    Variable 是基于 BehaviorSubject 的一层封装,它的优势是:不会被显式终结。即:不会收到 .Completed 和 .Error 这类的终结事件,它会主动在析构的时候发送 .Complete 。

    ================================
    Variable
    Variable 是基于 BehaviorSubject 的一层封装,它的优势是:不会被显式终结。即:不会收到 .Completed 和 .Error 这类的终结事件,它会主动在析构的时候发送 .Complete 。
    需要通过asObservable()方法来访问其behavior subject.主题

    example(of: "Variable") { 
        let variable = Variable("z")
        let disposeBag = DisposeBag()
        variable.value = "new initial"
        variable.asObservable().subscribe{print("1)\($0)")}.addDisposableTo(disposeBag)
    }
    

    相关文章

      网友评论

          本文标题:RxSwift学习(Subject)

          本文链接:https://www.haomeiwen.com/subject/jgtwkxtx.html