Reputation: 1403
I'm having a real hard time trying to create an extension that converts a Single array to an Observable. So for example I have a Single<[Address]>
and I want to convert it to an Observable<Address>
.
The code I have to write each time I want to do this is
mySingleVariable.asObservable().flatMap({ addresses in Observable.from(addresses) })
This operation is very common and the code is quite verbose. My attempt to create an extension looks like the following
extension PrimitiveSequence where Trait == SingleTrait {
func flatObservable<R: Collection>() -> Observable<R.Element> {
return asObservable().flatMap({ element in Observable.from(element) })
}
}
The code above unfortunately does not work. The error I get is "Generic parameter 'R' is not used in function signature". This is because the function returns Observable<R.Element>
. If it were to return Observable<R>
, the error would go away, but it's not the result I'm trying to achieve.
Upvotes: 4
Views: 3631
Reputation: 33967
Try this:
extension PrimitiveSequence where Trait == SingleTrait, Element: Sequence {
func flatObservable<R>() -> Observable<R> where R == Element.Element {
return asObservable().flatMap { Observable.from($0) }
}
}
Upvotes: 5