You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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协议解析响应,不需要手动做类型转换,代码更易维护、类型安全:

  1. 首先定义和接口响应结构匹配的数据模型
struct AuthResponse: Codable {
    let data: AuthData
    let key: String?
    let message: String
    let succeed: Int
}

struct AuthData: Codable {
    let security: [String]
    let token: String
}
  1. 替换请求方法为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:06:01