Xcode断点后如何查看Swift类对象内容?API响应解析求助
解决Swift中API Gateway SDK返回对象无法查看数值的问题
嘿,作为也踩过AWS API Gateway SDK坑的Swift开发者,我来帮你解决这个问题~
为什么你只能看到内存地址?
你看到的<AmplifyRestApiTest.Empty: 0x600002020770> { }是AWSModel默认的description输出,核心原因有两个:
- 生成的
Empty类没有定义任何对应API响应的属性,你看它的jsonKeyPathsByPropertyKey()返回的是空字典,意味着SDK不知道要把API返回的JSON字段映射到哪个属性上。 - 默认
print对象时,调用的是父类AWSModel的描述方法,只会输出类名、内存地址和空属性字典,自然看不到实际返回值。
而且你提到CloudWatch显示API已经成功返回结果,说明请求是通的,只是SDK解析和对象定义出了问题。
具体解决步骤
1. 先明确API的实际响应结构
先去CloudWatch日志里把API返回的完整JSON抄下来,比如假设返回的是:
{"calculationResult": "8"}
这一步很关键,你得知道API给了你什么字段,才能对应到Swift类里。
2. 修改Empty类,添加属性和JSON映射
打开自动生成的Empty.swift,给它加上对应API返回字段的属性,同时更新jsonKeyPathsByPropertyKey()方法来建立映射:
import Foundation import AWSCore @objcMembers public class Empty : AWSModel { // 新增对应API返回字段的属性,类型要和JSON值匹配(字符串/数字等) public var calculationResult: String? public override static func jsonKeyPathsByPropertyKey() -> [AnyHashable : Any]! { var params:[AnyHashable : Any] = [:] // 把Swift属性名和JSON中的key对应起来 params["calculationResult"] = "calculationResult" return params } }
这样SDK在解析API响应时,就会自动把JSON里的calculationResult值赋值给这个属性了。
3. 打印具体属性而非整个对象
修改你的打印代码,直接访问对象的属性,而不是打印整个对象:
if let result = task?.result as? Empty { // 用空合运算符处理属性为nil的情况 print("The calculation result is: \(result.calculationResult ?? "No result returned")") }
4. 断点调试的正确姿势
如果用断点调试,在Debug区域右键点击result对象,选择Print Description of 'result',或者在LLDB控制台输入po result,就能看到包含属性值的对象描述了,而不是单纯的内存地址。
额外建议:检查API Gateway的模型配置
如果不想手动修改生成的类,你可以去API Gateway控制台检查:
- 找到你的
calcGet方法,查看它的Response Models是否正确关联了包含返回字段的模型 - 如果模型是空的或者不对,重新定义正确的响应模型,然后重新生成SDK替换项目里的文件,这样自动生成的类就会包含对应的属性和映射了。
内容的提问来源于stack exchange,提问作者motivus
相关产品推荐
相关产品推荐

