使用SwiftyJSON解析JSON时遇类型错误,寻求解决方案
解决SwiftyJSON解析时的类型不匹配问题
你遇到的核心问题是类型不匹配:json["menu"].arrayValue返回的是[JSON]类型的数组,但你的menu属性声明的是[getMenu]?,直接赋值肯定会触发编译错误。我们需要把每个JSON对象转换成getMenu实例才行。
修改后的完整代码
先纠正几个小细节(比如类名拼写规范、方法名笔误),再修复核心的解析逻辑:
// Swift惯例中类名建议大写开头,提升代码可读性 class GetMenu { var id: Int? var name: String? var menu: [GetMenu]? // 修正方法名:parse 不是 pasrs func parse(json: JSON){ self.id = json["id"].intValue self.name = json["name"].stringValue // 遍历JSON数组,逐个转换为GetMenu实例 self.menu = json["menu"].arrayValue.map { jsonItem in let menuItem = GetMenu() menuItem.parse(json: jsonItem) return menuItem } // 可选:如果API中menu字段可能不存在/为null,用可选绑定更严谨 // if let menuArray = json["menu"].array { // self.menu = menuArray.map { // let item = GetMenu() // item.parse(json: $0) // return item // } // } } }
为什么这样改?
json["menu"].arrayValue会提取出所有子元素组成的[JSON]数组,我们用map方法遍历这个数组:对每个JSON元素创建一个GetMenu实例,调用parse方法解析它的内容,最后把这些实例收集成[GetMenu]数组,完美匹配你的menu属性类型。- 可选绑定的写法可以处理API返回中
menu字段不存在的情况,此时你的menu属性会保持nil,而不是被赋值为空数组,更贴合实际数据场景。
内容的提问来源于stack exchange,提问作者user6545780
相关产品推荐
相关产品推荐

