rxSwift扩展,用于将Single <[Element]>转换为Observable <element>

时间:2018-12-04 19:56:08

标签: ios arrays swift observable rx-swift

我很难创建一个将Single数组转换为Observable的扩展。例如,我有一个Single<[Address]>,我想将其转换为Observable<Address>

每次我要写的代码都是

mySingleVariable.asObservable().flatMap({ addresses in Observable.from(addresses) })

此操作非常常见,代码很冗长。我尝试创建扩展的尝试如下所示:

extension PrimitiveSequence where Trait == SingleTrait {
    func flatObservable<R: Collection>() -> Observable<R.Element> {
        return asObservable().flatMap({ element in Observable.from(element) })
    }
}

不幸的是,以上代码无法正常工作。我得到的错误是“函数签名中未使用通用参数'R'”。这是因为该函数返回Observable<R.Element>。如果返回Observable<R>,该错误将消失,但这不是我要达到的结果。

1 个答案:

答案 0 :(得分:2)

尝试一下:

extension PrimitiveSequence where Trait == SingleTrait, Element: Sequence {

    func flatObservable<R>() -> Observable<R> where R == Element.Element {
        return asObservable().flatMap { Observable.from($0) }
    }
}