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
相关产品推荐
相关产品推荐

