过滤器运算符 API 响应在 RxSwift 中不起作用
Filter Operator API response not working in RxSwift
我无法找出问题所在,只是根据如下状态代码过滤掉响应:
代码应该根据可观察到的状态代码和return response & data
过滤掉响应。
您的方法几乎没有问题:
- 当您的
URLSession.shared.rx.response
已经 return 正在 Observable
时,为什么还要使用 Observable.create
?
- 你的最后一个
flatMap
应该 return 一个 Observable
但你没有 return 从那里
URLSession.shared.rx.data
会为您进行 statusCode
检查
- 可以使用
.decode
运算符解码
- 为什么 return 是
T
的通用函数却被命名为 getUsers
?
- 您永远不会订阅
Observable.create
内的内部 Observable
,因此您的反应链永远不会 运行
考虑到这些问题,您可以将代码调整为:
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())
}
我无法找出问题所在,只是根据如下状态代码过滤掉响应:
代码应该根据可观察到的状态代码和return response & data
过滤掉响应。
您的方法几乎没有问题:
- 当您的
URLSession.shared.rx.response
已经 return 正在Observable
时,为什么还要使用Observable.create
? - 你的最后一个
flatMap
应该 return 一个Observable
但你没有 return 从那里 URLSession.shared.rx.data
会为您进行statusCode
检查- 可以使用
.decode
运算符解码 - 为什么 return 是
T
的通用函数却被命名为getUsers
? - 您永远不会订阅
Observable.create
内的内部Observable
,因此您的反应链永远不会 运行
考虑到这些问题,您可以将代码调整为:
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())
}