Swift:RxSwift 的 asObservable() 方法和类型擦除

Boo*_*oon 6 type-erasure rx-swift swift3

我在理解RxSwift 的Observable 类中asObservable 方法的基本原理和目的时遇到问题。

/// A type-erased `ObservableType`. 
///
/// It represents a push style sequence.
public class Observable<Element> : ObservableType {
    /// Type of elements in sequence.
    public typealias E = Element

    public func subscribe<O: ObserverType>(_ observer: O) -> Disposable where O.E == E {
        abstractMethod()
    }

    public func asObservable() -> Observable<E> {
        return self
    }
}
Run Code Online (Sandbox Code Playgroud)

asObservable 返回 self 的目的是什么?

当然,如果您可以运行此方法,则您已经可以访问该对象。另外,ObservableType评论中的“type-erased ”是什么意思?

Sco*_*t H 3

我相信,如果您查看ObservableType协议以及哪些对象符合它(即主题等),答案是显而易见的。唯一的保证是该对象将返回 来Observable响应对 的调用asObservable。虽然一致性对于一个 来说是微不足道的Observable,但对于科目和其他单位来说可能就不那么重要了。但是这个保证允许您在同一个操作符链中使用可以Observable一起提供的所有类型。

本质上,这类似于Strings 的一致性CustomStringConvertible