SwiftUI中使用Alamofire请求接口如何提取响应data中的token值
Swift中Alamofire响应嵌套token字段提取方案
问题根源
json["data"] 返回的是Any类型,Swift不支持直接对Any类型执行字典下标取值操作,需要先将data字段的值转型为[String: Any]字典类型后,再提取内层的token字段。
解决方案1:最小改动适配现有写法
仅需要在原有代码基础上增加层级的可选类型绑定即可,代码如下:
AF.request("http://40.86.255.119/api/Authentication", method: .post, parameters: parameters, encoding: JSONEncoding.default) .responseJSON { response in switch response.result { case .success(let value): if let json = value as? [String: Any], let data = json["data"] as? [String: Any], let token = data["token"] as? String { print(json["message"] ?? "") print(token) // 可正常输出token值 } case .failure(let error): print(error) } }
可选绑定的写法可以避免字段缺失、类型不匹配时的运行时崩溃,更安全。
解决方案2:推荐使用Codable规范解析(生产环境首选)
Alamofire原生支持Codable协议解析响应,不需要手动做类型转换,代码更易维护、类型安全:
- 首先定义和接口响应结构匹配的数据模型
struct AuthResponse: Codable { let data: AuthData let key: String? let message: String let succeed: Int } struct AuthData: Codable { let security: [String] let token: String }
- 替换请求方法为
responseDecodable自动解析
AF.request("http://40.86.255.119/api/Authentication", method: .post, parameters: parameters, encoding: JSONEncoding.default) .responseDecodable(of: AuthResponse.self) { response in switch response.result { case .success(let res): print(res.message) print(res.data.token) // 直接取token,类型自动匹配 case .failure(let error): print(error) } }
内容的提问来源于stack exchange,提问作者rameez khan
相关产品推荐
相关产品推荐

