andrei
andrei

Reputation: 1403

rxSwift extension for converting Single<[Element]> to Observable<Element>

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

Answers (1)

Daniel T.
Daniel T.

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

Related Questions