Skip to content

Files

Latest commit

DKJoneDKJone
and
Dec 15, 2016
bc80b77 · Dec 15, 2016

History

History
129 lines (94 loc) · 4.46 KB

Connectable_Operators.md

File metadata and controls

129 lines (94 loc) · 4.46 KB

上一页 - 返回目录

第七章 Connectable

可连接Observable队列除了在被订阅时不发送元素之外都和普通的Observable队列类似,作为替代可连接的Observable队列只在他们的connect()方法执行后才会发送元素。所以你可以订阅所有你想订阅的连接型OBservable队列在他发送元素之前。

这个页面里的所有例子都有注释掉的代码,试着去掉这些注释重新运行观察结果,然后再把注释添加回来 。

在开始学习可连接队列前我们来回顾一下不可连接队列的操作:

func sampleWithoutConnectableOperators() {
    printExampleHeader(#function)
    
    let interval = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
    
    _ = interval
        .subscribe(onNext: { print("Subscription: 1, Event: \($0)") })
    
    delay(5) {
        _ = interval
            .subscribe(onNext: { print("Subscription: 2, Event: \($0)") })
    }
}

//sampleWithoutConnectableOperators() // ⚠️ 去掉这些注释重新运行观察结果,然后再把注释添加回来.

interval创建一个在每个周期(Period)后发送元素的Observable队列. 更多信息


publish

把元Observable队列转换成可连接的Observable队列。 更多信息

func sampleWithPublish() {
   printExampleHeader(#function)
   
   let intSequence = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
       .publish()
   
   _ = intSequence
       .subscribe(onNext: { print("Subscription 1:, Event: \($0)") })
   
   delay(2) { _ = intSequence.connect() }
   
   delay(4) {
       _ = intSequence
           .subscribe(onNext: { print("Subscription 2:, Event: \($0)") })
   }
   
   delay(6) {
       _ = intSequence
           .subscribe(onNext: { print("Subscription 3:, Event: \($0)") })
   }
}

//sampleWithPublish() // ⚠️ 去掉这些注释重新运行观察结果,然后再把注释添加回来.

> 执行操作的调度者只是一个抽象出来的概念,比如在指定线程和`dispatch queues`。 [更多信息](https://github.com/ReactiveX/RxSwift/blob/master/Documentation/Schedulers.md)

replay

把原Observable队列转换为可连接队列。并把bufferSize大小的之前元素推送给新的订阅者。 更多信息

func sampleWithReplayBuffer() {
   printExampleHeader(#function)
   
   let intSequence = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
       .replay(5)
   
   _ = intSequence
       .subscribe(onNext: { print("Subscription 1:, Event: \($0)") })
   
   delay(2) { _ = intSequence.connect() }
   
   delay(4) {
       _ = intSequence
           .subscribe(onNext: { print("Subscription 2:, Event: \($0)") })
   }
   
   delay(8) {
       _ = intSequence
           .subscribe(onNext: { print("Subscription 3:, Event: \($0)") })
   }
}

// sampleWithReplayBuffer() // ⚠️ 去掉这些注释重新运行观察结果,然后再把注释添加回来.

multicast

转化原Observable队列为可连接队列,并发送指定的Subject

func sampleWithMulticast() {
   printExampleHeader(#function)
   
   let subject = PublishSubject<Int>()
   
   _ = subject
       .subscribe(onNext: { print("Subject: \($0)") })
   
   let intSequence = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
       .multicast(subject)
   
   _ = intSequence
       .subscribe(onNext: { print("\tSubscription 1:, Event: \($0)") })
   
   delay(2) { _ = intSequence.connect() }
   
   delay(4) {
       _ = intSequence
           .subscribe(onNext: { print("\tSubscription 2:, Event: \($0)") })
   }
   
   delay(6) {
       _ = intSequence
           .subscribe(onNext: { print("\tSubscription 3:, Event: \($0)") })
   }
}

//sampleWithMulticast() // ⚠️ 去掉这些注释重新运行观察结果,然后再把注释添加回来.

下一章 - 返回目录