Search code examples
iosswiftrxjsrx-swift

Filter Operator API response not working in RxSwift


I am not able to find out the what is the issue , just to filter out response based on status code as follow:

The code should be filter out the response based on the status code and return response and data as observable.


Solution

  • There are few issues with your approach:

    • Why are you using Observable.create when you have URLSession.shared.rx.response that is already returning Observable?
    • Your last flatMap should return an Observable but you are not returning anything from there
    • There's URLSession.shared.rx.data that does the statusCode check for you
    • You can use .decode operator for decoding
    • Why it's a generic func that returns T but is named getUsers?
    • You are never subscribing to the inner Observable inside Observable.create so your reactive chain will never run

    Given these issue you can adapt your code to:

    func getUsers<T: Codable>(urlStr: String) -> Observable<T> {
      guard let url = URL(string: urlStr) else { return .empty() } 
      return URLSession.shared.rx.data(request: .init(url: url))
        .decode(type: T.self, decoder: JSONDecoder())
    }