共享重播功能如何工作



我已经阅读了RxSwift/ShareReplayScope.swift文件,但有点难以理解。

public func share(replay: Int = 0, scope: SubjectLifetimeScope = .whileConnected)
        -> Observable<E> {
        switch scope {
        case .forever:
            switch replay {
            case 0: return self.multicast(PublishSubject()).refCount()
            default: return self.multicast(ReplaySubject.create(bufferSize: replay)).refCount()
            }
        case .whileConnected:
            switch replay {
            case 0: return ShareWhileConnected(source: self.asObservable())
            case 1: return ShareReplay1WhileConnected(source: self.asObservable())
            default: return self.multicast(makeSubject: { ReplaySubject.create(bufferSize: replay) }).refCount()
            }
        }
    }

0,1和默认,有什么区别? 为什么要将 1 与 Defalut 分开?

 override func subscribe<O : ObserverType>(_ observer: O) -> Disposable where O.E == E {
        _lock.lock()
        let connection = _synchronized_subscribe(observer)
        let count = connection._observers.count
        let disposable = connection._synchronized_subscribe(observer)
        _lock.unlock()
        if count == 0 {
            connection.connect()
        }
        return disposable
    }

lock如何工作,最困难的是这个功能。 被阻止的观察对象如何正确连接到其观察者。

下面您可以获得有关shareReplay函数的信息。

分享((

如您所知,共享函数共享Observable的订阅。这样您就不需要每次都创建多个可观察实例。

只需创建一个可观察量并共享回放即可。 它将允许在此可共享可观察量内执行下一个操作。 即filter()subscribe()等。

share()的问题是,它不是在订阅之前提供值。

分享重播((

其中shareReplay()保留最后几个发出的值的缓冲区,并可以在订阅时将它们提供给新的观察者。

相关内容

  • 没有找到相关文章

最新更新