美文网首页
RxSwift(3)核心逻辑

RxSwift(3)核心逻辑

作者: 忆痕无殇 | 来源:发表于2019-07-25 15:28 被阅读0次
    Observable.jpg

    以上是总结的Observable核心逻辑。可能时序关系不正确。希望大家留言指正。

    1:ObservableType.swift
    public protocol ObservableType: ObservableConvertibleType {
        func subscribe<Observer: ObserverType>(_ observer: Observer) -> Disposable where Observer.Element == Element
    }
    //这里subscribe在子类里具体实现。
    

    在父类里定义E= Element

    /// Type that can be converted to observable sequence (`Observable<Element>`).
    public protocol ObservableConvertibleType {
        /// Type of elements in sequence.
        associatedtype Element
    
        @available(*, deprecated, message: "Use `Element` instead.")
        typealias E = Element   //后面就用<E>代替
    
        /// Converts `self` to `Observable` sequence.
        ///
        /// - returns: Observable sequence that represents `self`.
        func asObservable() -> Observable<Element>
    }
    
    
    2:Creat.swift
     func on(_ event: Event<Element>) {
            switch event {
            case .next:
                if load(self._isStopped) == 1 {
                    return
                }
                self.forwardOn(event)
            case .error, .completed:
                if fetchOr(self._isStopped, 1) == 0 {
                    self.forwardOn(event)
                    self.dispose()
                }
            }
        }//赋予on方法具体咋样现在还是有点蒙蒙的。需要在学两遍。稍后完成补充。
    
    AnonymousObservable.jpg
    3:匿名可观察序列
    final private class AnonymousObservable<Element>: Producer<Element> 
    

    \color{red}{Producer}很重要,提供订阅、调度者和销毁功能。
    \color{red}{Obserable}只提供定义
    \color{red}{ObservableType}提供协议扩展功能

    4:自己的计数逻辑

    RxSwift拥有自己的计数逻辑

        init(observer: Observer, cancel: Cancelable) {
    #if TRACE_RESOURCES
            _ = Resources.incrementTotal()
    #endif
    
     deinit {
    #if TRACE_RESOURCES
           _ =  Resources.decrementTotal()
    #endif
    

    相关文章

      网友评论

          本文标题:RxSwift(3)核心逻辑

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