【发布时间】:2022-12-31 09:21:05
【问题描述】:
好吧,就像标题说的那样,我在响应服务上调用了一个 JSON 数组,但我找不到使用 Combine 解码的方法:
URLSession.shared.dataTaskPublisher
客服回复:https://codebeautify.org/alleditor/y228809f7
我的请求代码:
public func getGasStationDiscounts(requestModel: GasStationDiscountsRequestDomainModel) -> CiMAObservable<GasStationDiscountsDomainModel> {
guard let url = URL(string: RepositoryConstants.baseURL + String(format: RepositoryConstants.EndPoints.gasStationDiscounts, requestModel.gasStationID)) else {
return Fail(error: NSError(domain: "URL Invalid", code: 001, userInfo: nil)).eraseToAnyPublisher()
}
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "GET"
urlRequest.addValue("application/json", forHTTPHeaderField: "Accept")
urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
return URLSession.shared.dataTaskPublisher(for: urlRequest)
.map(\.data)
.decode(type: GasStationDiscountsDataModel.self, decoder: JSONDecoder())
.map { model -> GasStationDiscountsDomainModel in
model.parseToDomainModel()
}.eraseToAnyPublisher()
}
解码文件:https://codebeautify.org/alleditor/y2296aefe
所以恢复,我的问题是尝试解码它,因为它是一个数组,在我的项目中,我正在使用不同的层,如数据、域和演示(不要问架构因为是一个新的,GitHub 上的 CiMA)它是混合毒蛇拱门。
提前致谢!
编辑:解决了!所以最后我找到了一个不会破坏我的架构的解决方案。 所以这里是可解码文件的小改动:https://codebeautify.org/alleditor/y22ad811e
以及请求的最后更改:
public func getGasStationDiscounts(requestModel: GasStationDiscountsRequestDomainModel) -> CiMAObservable<GasStationDiscountsDomainModel> {
guard let url = URL(string: RepositoryConstants.baseURL + String(format: RepositoryConstants.EndPoints.gasStationDiscounts, requestModel.gasStationID)) else {
return Fail(error: NSError(domain: "URL Invalid", code: 001, userInfo: nil)).eraseToAnyPublisher()
}
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "GET"
urlRequest.addValue("application/json", forHTTPHeaderField: "Accept")
urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
return URLSession.shared.dataTaskPublisher(for: urlRequest)
.map(\.data)
.decode(type: [GasStationDiscountsDataModel].self, decoder: JSONDecoder())
.map { model -> GasStationDiscountsDomainModel in
let stationDiscountsDomainModel = model.map { model -> StationDiscountDomainModel in
model.parseToDomainModel()
}
return GasStationDiscountsDomainModel(stationDiscounts: stationDiscountsDomainModel)
}
.mapError { error in
print(error.localizedDescription)
return error
}.eraseToAnyPublisher()
}
【问题讨论】:
标签: json swift combine urlsession decodable