ios - 以下两种方法的 Apple 组合等效项是什么?
问题描述
在 URLSession.shared.dataTaskPublisher(for:>) 中有一个 URL Session 的等价物,同样用于处理“错误沙解码”但是如何处理 discardableResult 的返回类型?在 URLSession.shared.dataTaskPublisher(for:>) 中有一个 URL Session 的等价物,同样用于处理错误沙解码
@discardableResult class func taskForGETRequest<ResponseType: Decodable>(url: URL, responseType: ResponseType.Type, completion: @escaping (ResponseType?, Error?) -> Void) -> URLSessionTask {
let task = URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data else {
DispatchQueue.main.async {
completion(nil, error)
}
return
}
let decoder = JSONDecoder()
do {
let responseObject = try decoder.decode(ResponseType.self, from: data)
DispatchQueue.main.async {
completion(responseObject, nil)
}
} catch {
do {
let errorResponse = try decoder.decode(TMDBResponse.self, from: data)
completion(nil,errorResponse)
} catch {
DispatchQueue.main.async {
completion(nil, error)
}
}
}
}
task.resume()
return task
}
class func taskForPOSTRequest<RequestType: Encodable, ResponseType: Decodable>(url: URL, responseType: ResponseType.Type, body: RequestType, completion: @escaping (ResponseType?, Error?) -> Void) {
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try! JSONEncoder().encode(body)
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
guard let data = data else {
completion(nil, error)
return
}
let decoder = JSONDecoder()
do {
let responseObject = try decoder.decode(ResponseType.self, from: data)
completion(responseObject, nil)
} catch {
do {
let errorResponse = try decoder.decode(TMDBResponse.self, from: data)
completion(nil,errorResponse)
} catch {
DispatchQueue.main.async {
completion(nil, error)
}
}
}
}
task.resume()
}
解决方案
推荐阅读
- reactjs - 来自 With Style 的访问类
- excel - Excel公式获取3个单元格中最常见的值?
- android - Android Aidl 枚举未构建
- java - 将动态值传递给 log4j2 xml 配置
- angular - 类型上不存在 Angular 5 属性“子菜单”
- javascript - 模态关闭时的溢出问题
- ios - 将 iOS 应用程序与 MobFox 连接
- android - 带有 Listview 和 firebase 的 Android
- python - 将 timedelta 的时间转换/使用为 datetime
- python - try/except 子句和数值范围条件