Я учусь использовать RxSwift и застрял, используя этот простой код.Я собираюсь взять тип APIRequest, такой простой:
public protocol APIRequest: Encodable {
associatedtype Response: Decodable
var path: String { get }
}
Передать его клиенту API и, наконец, вернуть Observable типа T.Response
, однако я постоянно вижу cancelled
статус в моей консоли:
2019-07-01 10:46:04.847: test api request -> subscribed
2019-07-01 10:46:04.855: test api request -> isDisposed
Это код моего APIClient:
func send<T: APIRequest>(_ request: T) -> Observable<T.Response> {
guard let fullURL = endpoint(for: request) else {
return Observable.error(APIError.invalidBaseURL)
}
return Observable<T.Response>.create { observer in
let request = URLRequest(url: fullURL)
let response = URLSession.shared.rx.response(request: request)
.debug("test api request")
return response.subscribe(onNext: { response, data in
if 200..<300 ~= response.statusCode {
guard let responseItems = try? self.jsonDecoder.decode(T.Response.self, from: data) else {
return observer.onError(APIError.decodingFailed)
}
observer.onNext(responseItems)
observer.onCompleted()
}
}, onError: { error in
observer.onError(APIError.other(error))
}, onCompleted: nil,
onDisposed: nil)
}
}
Я пытался вывести результаты на консоль с помощью:
apiClient.send(countriesRequest)
.subscribe(onNext: {
print("Success", $0)
}, onError: {
print("Error: ", $0)
}, onCompleted: {
print("Completed!")
})
.disposed(by: disposeBag)
Что я делаю не так и почему?