I currently have a method that returns an observable. However, it only ever returns one element.
func getMyResponse(queryID: String) -> Observable<Response> {
return observable
}
I am trying to refactor this code from returning Observable<Response>
to Single<Response>
.
func getMyResponse(queryID: String) -> Single<Response> {
return observable.first()
}
The above is not working and gives the following error:
Cannot convert return expression of type 'PrimitiveSequence<SingleTrait, Response?>' to return type 'Single<Response>`.
Anyone know how to fix this issue? Any insight would be much appreciated!
You are telling the compiler that you will return a Single<Response>
from the function, but you are actually returning a Single<Response?>
. That's an error.
Note that Single<Response?>
is a typealias of PrimitiveSequence<SingleTrait, Response?>
.
For more information. You could do either of the following:
func option1(queryID: String) -> Single<Response> {
return observable.asSingle()
}
func option2(queryID: String) -> Single<Response?> {
return observable.first()
}
For option1
... If the observable completes without emitting a value the Single will emit an error RxError.noElements
. If the observable emits a second value before completing, the asSingle()
will convert that second value into an error RxError.moreThanOneElement
For option2
... If the observable completes without emitting a value, it will emit nil
and complete. And the observable will be disposed before it gets a chance to emit a second value.