- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Swift 新手,我正在尝试升级一些旧的 Swift 代码。我收到以下警告:
'responseJSON(queue:dataPreprocessor:emptyResponseCodes:emptyRequestMethods:options:completionHandler:)'is deprecated: responseJSON deprecated and will be removed inAlamofire 6. Use responseDecodable instead.
extension Alamofire.DataRequest {
func json(_ options: JSONSerialization.ReadingOptions = .allowFragments, successHandler: ((Any?) -> Void)? = nil, failureHandler: ((AFDataResponse<Any>) -> Void)? = nil) -> Self {
return responseJSON() {
response in
if UtilityService.ensureSuccessful(response, failureHandler: { failureHandler?(response) }) {
successHandler?(response.value)
}
NetworkActivityManager.sharedInstance.decrementActivityCount()
}
}
}
如果我用 responseDecodable 替换 responseJSON,我会收到以下错误:
Generic parameter 'T' could not be inferred
最佳答案
Alamofire推荐使用responseDecodable()
因为人们经常使用 responseJSON()
,然后得到 response.data
, 并调用 JSONDecoder()
在上面。所以这是对 JSONSerialization
的内部调用不求返回”。此外,由于 Codable 是"new"的,并且仍然有旧问题可用,人们可能会错过 Codable 功能。见 this topic在 Alamofire repo 。
所以如果你使用 Codable
, 我鼓励尽可能使用 responseDecodable()
反而。
但是,您仍然可以手动完成,通过检索 Data
没有转换:
为此,请使用:
@discardableResult func responseData(queue: DispatchQueue = .main, dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, emptyResponseCodes: Set<Int> = DataResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set<HTTPMethod> = DataResponseSerializer.defaultEmptyRequestMethods, completionHandler: @escaping (AFDataResponse<Data>) -> Void) -> Self
正在使用:
request.responseData { response in
switch response.result {
case .success(let data):
do {
let asJSON = try JSONSerialization.jsonObject(with: data)
// Handle as previously success
} catch {
// Here, I like to keep a track of error if it occurs, and also print the response data if possible into String with UTF8 encoding
// I can't imagine the number of questions on SO where the error is because the API response simply not being a JSON and we end up asking for that "print", so be sure of it
print("Error while decoding response: "\(error)" from: \(String(data: data, encoding: .utf8))")
}
case .failure(let error):
// Handle as previously error
}
}
关于ios - 在 Swift 中将 responseJSON 更新为 responseDecodable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70789753/
我是 Swift 新手,我正在尝试升级一些旧的 Swift 代码。我收到以下警告: 'responseJSON(queue:dataPreprocessor:emptyResponseCodes:em
我正在使用 Alamofire 5(测试版 1)为 WooCommerce 编写 API 客户端,这将允许我获取订单、优惠券等以及创建它们。注意我使用的是新的 .responseDecodable功能
我正在尝试使用 alamofire 和 responseDecodable 向后端发出 API 请求。 AF.request(Router.registerFacebookUser(facebookT
我是一名优秀的程序员,十分优秀!