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

Swift如何创建容纳多种数据类型的数组或字典

Swift中创建多类型数组/字典的更优实现方式

你当前的实现方式虽然可行,但Swift提供了几种更简洁、类型更安全的方案,以下是常用的几种:

1. 使用枚举(Enum)(推荐)

利用枚举的关联值特性,可以直接封装不同类型的数据,同时保留明确的类型信息,无需额外维护字符串类型标识:

struct Type1 {
    var t1: String
}

struct Type2 {
    var t2: Int
}

enum MixedType {
    case type1(Type1)
    case type2(Type2)
}

// 创建多类型数组
let dataArray: [MixedType] = [
    .type1(Type1(t1: "Example")),
    .type2(Type2(t2: 2025))
]

// 遍历使用时的类型判断
for item in dataArray {
    switch item {
    case .type1(let value):
        print(value.t1)
    case .type2(let value):
        print(value.t2)
    }
}

这种方式完全保留类型安全性,代码简洁直观,是Swift中处理多类型集合的标准做法。

2. 使用协议(Protocol)

如果你的多个类型有共同行为,可以定义一个协议让它们遵循,再创建协议类型的数组:

protocol MixedDataType {
    // 定义共同行为,比如类型识别方法
    func typeIdentifier() -> String
}

struct Type1: MixedDataType {
    var t1: String
    func typeIdentifier() -> String {
        return "Type1"
    }
}

struct Type2: MixedDataType {
    var t2: Int
    func typeIdentifier() -> String {
        return "Type2"
    }
}

// 创建数组
let dataArray: [MixedDataType] = [
    Type1(t1: "Example"),
    Type2(t2: 2025)
]

// 使用时的类型处理
for item in dataArray {
    print(item.typeIdentifier())
    // 访问具体类型属性需做类型转换
    if let type1Item = item as? Type1 {
        print(type1Item.t1)
    } else if let type2Item = item as? Type2 {
        print(type2Item.t2)
    }
}

这种方式适合类型间有共性行为的场景,扩展性更强。

3. 使用Any类型(不推荐)

Swift支持Any存储任意类型数据,但会丢失类型安全性,使用时需强制类型转换,容易出错:

struct Type1 {
    var t1: String
}

struct Type2 {
    var t2: Int
}

// 创建数组
let dataArray: [Any] = [
    Type1(t1: "Example"),
    Type2(t2: 2025)
]

// 使用时的类型判断
for item in dataArray {
    if let type1Item = item as? Type1 {
        print(type1Item.t1)
    } else if let type2Item = item as? Type2 {
        print(type2Item.t2)
    }
}

这种方式虽然写法简单,但放弃了Swift的类型安全特性,非必要场景不建议使用。

对比你当前的实现,枚举方案是最简洁且安全的选择,代码可读性和维护性都更强。

内容的提问来源于stack exchange,提问作者Kitten Apps-Films

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:47:11