Swift中AlamoFire报错:[String:String]转HTTPHeaders失败及Result API错误
解决AlamoFire请求重试函数的两个错误
错误1:[String:String]无法转为HTTPHeaders?
AlamoFire的request方法要求headers参数为HTTPHeaders?类型,而非普通的[String:String]字典。有两种修正方式:
- 直接用字典初始化
HTTPHeaders:let headers = HTTPHeaders(["Authorization": token]) - 先创建
HTTPHeaders实例再添加字段:var headers = HTTPHeaders() headers.add(name: "Authorization", value: token)
错误2:Result<Any, AFError>没有成员value
在switch response.result的.success分支中,已经通过let .success(value)提取到了成功响应的关联值,Result是枚举类型本身没有value属性,直接使用提取出的value即可,无需再调用response.result.value。
修正后的完整代码片段
func requestWithRetries(tag: String, url: String, maxRetry: Int = 3, expectJSONArray: Bool, completion: @escaping jsonCompletion) { // 修正headers类型 var headers = HTTPHeaders() let token = "UNVCRDFR5M8BW0P72KU6" headers.add(name: "Authorization", value: token) let params = [String: Any]() let alamoRequest = alamoFire.request(serviceURL + url, method: .get, parameters: params, encoding: URLEncoding.default, headers: headers) .validate() .responseJSON { response in switch response.result { case let .success(value): // 直接使用模式匹配提取出的value let result = JSON(value) if let serverMessage = Utils.stringJSON(result["message"]) { self.didFail(tag: tag, error: serverMessage, code: nil) return } Utils().saveDebugData(result.description, fileName: tag) self.didRecieve(tag: tag, result: result) case let .failure(error): // 补充重试逻辑示例 if maxRetry > 0 { self.requestWithRetries(tag: tag, url: url, maxRetry: maxRetry - 1, expectJSONArray: expectJSONArray, completion: completion) } else { self.didFail(tag: tag, error: error.localizedDescription, code: error.responseCode) } } } }
内容的提问来源于stack exchange,提问作者Greg17
相关产品推荐
相关产品推荐

