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

Swift中如何将[Any]类型数组转换为结构体数组?

将[Any]数组转换为ThreatsModel结构体数组的解决方案

你可以通过以下两种常用方式完成转换,适配不同场景需求:

方法一:手动遍历转换(直观可控)

这种方式适合字段较少的模型,能清晰处理类型校验与转换失败的情况:

struct ThreatsModel: Codable {
    let info: String
    let name: Int
    let threatTypeId: Int
}

func convertToThreatsModels(from anyArray: [Any]) -> [ThreatsModel] {
    var result = [ThreatsModel]()
    
    for element in anyArray {
        // 将Any类型元素转为[String: Any]字典
        guard let threatDict = element as? [String: Any] else {
            continue
        }
        
        // 校验并提取各字段类型
        guard let info = threatDict["info"] as? String,
              let name = threatDict["name"] as? Int,
              let threatTypeId = threatDict["threatTypeId"] as? Int else {
            continue
        }
        
        // 初始化模型并加入结果数组
        result.append(ThreatsModel(info: info, name: name, threatTypeId: threatTypeId))
    }
    
    return result
}

// 调用示例
let threatsModels = convertToThreatsModels(from: threatsArrayVariable)

方法二:利用Codable与JSON序列化(简洁高效)

如果模型字段较多,这种方式能借助Codable的自动解码能力,减少重复代码:

struct ThreatsModel: Codable {
    let info: String
    let name: Int
    let threatTypeId: Int
}

func convertWithCodable(from anyArray: [Any]) -> [ThreatsModel] {
    var result = [ThreatsModel]()
    let decoder = JSONDecoder()
    
    for element in anyArray {
        guard let threatDict = element as? [String: Any] else {
            continue
        }
        
        // 将字典转为JSON Data
        guard let jsonData = try? JSONSerialization.data(withJSONObject: threatDict) else {
            continue
        }
        
        // 解码为ThreatsModel实例
        if let model = try? decoder.decode(ThreatsModel.self, from: jsonData) {
            result.append(model)
        }
    }
    
    return result
}

// 调用示例
let threatsModels = convertWithCodable(from: threatsArrayVariable)

注意事项

  • 原数组打印出的=符号是Objective-C风格的字典格式,在Swift中实际存储为[String: Any]类型,直接转换即可。
  • 两种方法都加入了类型校验,避免因字段缺失或类型不匹配导致崩溃,你可根据需求调整错误处理逻辑(比如抛出错误而非跳过)。

内容的提问来源于stack exchange,提问作者Maulana Frasha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:45:29