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

Swift中如何获取响应JSON及Alamofire POST请求状态码

嘿,我来帮你搞定这两个Swift相关的问题~

Swift中获取响应JSON及Alamofire POST请求状态码的处理

一、如何在Swift中获取响应JSON?

我分两种常用场景给你说明:

1. 用原生URLSession(无第三方库)

如果不想依赖第三方,原生的URLSession就能搞定,代码示例如下:

let url = URL(string: "你的接口地址")!
var request = URLRequest(url: url)
request.httpMethod = "GET" // 根据接口需求改成POST/PUT等

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    guard let data = data, error == nil else {
        print("请求出错啦:\(error?.localizedDescription ?? "未知错误")")
        return
    }
    
    // 解析JSON数据
    do {
        let json = try JSONSerialization.jsonObject(with: data, options: [])
        print("解析后的JSON:\(json)")
        // 要是需要转成字典或数组,直接强转就行
        if let jsonDict = json as? [String: Any] {
            // 这里可以处理字典里的具体字段,比如取某个值
            let username = jsonDict["username"] as? String
        }
    } catch {
        print("JSON解析失败:\(error.localizedDescription)")
    }
}
task.resume()

2. 用Alamofire(你正在用的库)

Alamofire已经帮我们封装了很多细节,用responseJSON方法就能直接拿到解析后的JSON,就像你代码里写的那样,稍微优化下逻辑更严谨:

AF.request("你的接口地址", method: .post, parameters: ["key": "value"])
    .responseJSON { response in
        switch response.result {
        case .success(let json):
            print("拿到的JSON数据:\(json)")
            // 转成字典方便处理字段
            if let jsonDict = json as? [String: Any] {
                let status = jsonDict["status"] as? Int
                let message = jsonDict["message"] as? String
            }
        case .failure(let error):
            print("请求失败:\(error.localizedDescription)")
        }
    }

二、从Alamofire的POST响应里拿状态码

你的代码已经拿到了response对象,状态码就藏在response.response?.statusCode里,我帮你修改下代码,让它更清晰:

case .success(let upload, _, _):
    upload.responseJSON { response in
        // 先获取状态码,注意解包避免空指针
        if let statusCode = response.response?.statusCode {
            print("响应状态码:\(statusCode)")
            // 还可以根据状态码分情况处理
            switch statusCode {
            case 200...299:
                print("请求成功啦~")
            case 400...499:
                print("客户端出错了,比如参数不对")
            case 500...599:
                print("服务器那边出问题了")
            default:
                print("未知状态码")
            }
        }
        
        // 原来的JSON处理逻辑也保留
        if let jsonData = response.result.value {
            print("获取到的JSON:\(jsonData)")
        }
    }

这里要注意response.response是可选类型,所以必须用if let解包,不然容易崩溃哦~

内容的提问来源于stack exchange,提问作者Mahrez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:26:05