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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:26:42