【发布时间】:2020-06-18 06:52:10
【问题描述】:
我是响应式编程和组合的新手,我有以下从 API 获取天气数据的方法。
- 首先,我检查如果我得到 200,如果没有,则抛出一个错误。
- 如果我得到正确的数据,我将通过 JSONDecoder 对其进行解码,但只是为了 检查 JSON 解码是否有问题我正在返回默认对象。
- 终于映射了抛出的错误 第一步,但我在 flatMAP 函数中收到以下错误 实例方法
flatMap(maxPublishers:_:)' 要求类型“Publishers.TryMap.Failure”(又名“Error”)和“Just.Failure”(又名“Never”)是等效的
private func fetchDataFor(urlStr: String) -> AnyPublisher<WeatherData, Error> {
let url = URL(string: urlStr)!
return URLSession.shared.dataTaskPublisher(for: url)
.tryMap({ (data, response) in
let response = (response as? HTTPURLResponse)
if response?.statusCode != 200 {
throw NSError(domain: "Error", code: response!.statusCode, userInfo: .none)
}
return data
})
.flatMap{ data in
Just(data)
.decode(type: WeatherData.self, decoder: JSONDecoder())
.catch{ error in
return Just(defaultWeatherData)
}
}
.mapError{ error in
return error
}
.receive(on: RunLoop.main)
.eraseToAnyPublisher()
}
有人可以指导这里出了什么问题,或者我使用了一些错误的方法。谢谢
【问题讨论】:
标签: ios swift reactive-programming combine flatmap