2017-02-02 110 views
0

我在理解RxSwift的Observable class中的asObservable method的基本原理和目的时遇到问题。Swift:RxSwift的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 
    } 
} 

asObservable返回自我时的目的是什么?

当然,如果你可以运行这种方法,你已经有权访问该对象。另外,评论中的“类型擦除ObservableType”是什么意思?

回答

1

我相信如果你看ObservableType协议和什么对象符合它(即像主题等东西),答案是显而易见的。 唯一的保证是该对象将返回Observable以响应对asObservable的调用。虽然对于Observable来说一致性是微不足道的,但对于主题和其他单位而言可能不那么重要。但是,此保证允许您使用可在同一运营商链中一起提供Observable的所有类型。

本质上这与Strings符合CustomStringConvertible相似。

+0

为什么评论说它的类型已被删除?这种类型是否真的被删除? – Boon

+0

我同意评论可能会令人困惑。然而,我读到它意味着'ObservableType'(例如'PublishSubject')的类型被擦除,而不是'Element'的类型。 –