我很难创建一个将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>
,该错误将消失,但这不是我要达到的结果。
答案 0 :(得分:2)
尝试一下:
extension PrimitiveSequence where Trait == SingleTrait, Element: Sequence {
func flatObservable<R>() -> Observable<R> where R == Element.Element {
return asObservable().flatMap { Observable.from($0) }
}
}