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

Swift如何为Struct添加字典初始化方法 将[[String:Any]]转为数据模型

实现方案

直接给Tools结构体新增基于Codable能力的字典初始化方法即可,无需改动原有逻辑,完整代码如下:

struct Tools: Codable{
    var name: String
    var qty : Int

    init(name: String, qty: Int){
        self.name = name
        self.qty = qty
    }
    
    // 新增字典参数抛出型初始化方法
    init(dict: [String: Any]) throws {
        // 将字典序列化为JSON数据
        let jsonData = try JSONSerialization.data(withJSONObject: dict)
        // 解码JSON得到当前结构体实例
        self = try JSONDecoder().decode(Tools.self, from: jsonData)
    }
}

注意事项

  • 若你的字典key和结构体属性名不匹配,可新增CodingKeys枚举做映射,示例:
    enum CodingKeys: String, CodingKey {
        case name
        case qty = "quantity" // 字典中对应数量的key为quantity的情况
    }
    
  • 若你提到的toolListDict确实是[[String: Any]]类型(存储多条工具的字典数组),可新增数组扩展批量解析:
    extension Array where Element == Tools {
        init(dictArray: [[String: Any]]) throws {
            let jsonData = try JSONSerialization.data(withJSONObject: dictArray)
            self = try JSONDecoder().decode([Tools].self, from: jsonData)
        }
    }
    // 批量解析调用示例
    let toolsArray = try [Tools](dictArray: toolListDict)
    

调用示例

建议配合do-catch捕获解析过程中的错误(如字段缺失、类型不匹配等):

do {
    // 单条工具解析
    let singleTool = try Tools(dict: ["name": "扳手", "qty": 10])
    print(singleTool.name, singleTool.qty)
} catch {
    print("解析失败: \(error)")
}

内容的提问来源于stack exchange,提问作者afi permana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:54:04