如何验证Swift编写的API调用代码是否正常返回数据
解决方案
可添加print调试输出的位置
你可以在以下几个位置添加print语句,分别排查不同环节的问题:
- 拿到接口返回的原始数据时,先打印原始JSON字符串,确认接口返回的内容是否符合预期:
在guard let data = data else { ... }判断之后添加代码:
// 打印原始响应数据 if let jsonString = String(data: data, encoding: .utf8) { print("接口返回原始内容:\(jsonString)") }
- 解析成功后打印解析得到的模型数据,确认解析逻辑是否正确:
在let vehicles = try decoder.decode([Vehicles].self, from: data)之后添加代码:
print("解析成功的车辆列表:\(vehicles)")
- 错误分支添加打印,确认是否报错、具体是哪个环节报错:
- 网络错误分支:
if let _ = error {代码块内加print("网络请求错误:\(error!.localizedDescription)") - 响应码错误分支:
guard let response = response as? HTTPURLResponse...判断之前加print("接口响应码:\((response as? HTTPURLResponse)?.statusCode ?? -1)") - 解析错误分支:
catch {代码块内加print("JSON解析错误:\(error)")
- 网络错误分支:
调用接口时的输出方式
你调用getVehicles方法时,在尾随闭包里也可以直接打印结果,示例调用代码:
APICaller.shared.getVehicles(for: "你的业务ID", IMEI: 你的IMEI数值) { result in switch result { case .success(let vehicles): print("请求成功,车辆数据:\(vehicles)") case .failure(let error): print("请求失败,错误类型:\(error)") } } // 如果是命令行项目,需要加以下代码防止程序提前退出,等待网络请求回调 RunLoop.main.run(until: Date().addingTimeInterval(120))
注意:如果是纯Swift CLI项目,默认主线程执行完同步代码就会直接退出,不会等待异步网络请求的回调,必须加上最后一行RunLoop的代码,才能等到返回结果输出。
内容的提问来源于stack exchange,提问作者user17416997
相关产品推荐
相关产品推荐

