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

Posted

技术标签:

【中文标题】用于将 Single<[Element]> 转换为 Observable<Element> 的 rxSwift 扩展【英文标题】:rxSwift extension for converting Single<[Element]> to Observable<Element> 【发布时间】:2018-12-04 19:56:08 【问题描述】:

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

每次我想这样做时我必须编写的代码是

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&lt;R.Element&gt;。如果返回Observable&lt;R&gt;,错误就会消失,但这不是我想要达到的结果。

【问题讨论】:

【参考方案1】:

试试这个:

extension PrimitiveSequence where Trait == SingleTrait, Element: Sequence 

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

【讨论】:

谢谢,它运行良好。你对我应该如何命名这个函数有什么建议吗?你觉得“flatObservable”合适吗?

以上是关于用于将 Single<[Element]> 转换为 Observable<Element> 的 rxSwift 扩展的主要内容,如果未能解决你的问题,请参考以下文章

540. Single Element in a Sorted Array

540. Single Element in a Sorted Array

540. Single Element in a Sorted Array

540. Single Element in a Sorted Array

[LeetCode] Single Element in a Sorted Array

540. Single Element in a Sorted Array(LeetCode)