swift 存放多类型的容器

常见问题

在 swift 中容器都是泛型,一个容器只能存放同一类型的元素

public struct Array<Element> : RandomAccessCollection, MutableCollection
public struct Dictionary<Key, Value> : Collection, ExpressibleByDictionaryLiteral where Key : Hashable
public struct Set<Element> : SetAlgebra, Hashable, Collection, ExpressibleByArrayLiteral where Element : Hashable

但如果想要把不同的类型放在同一个容器中我们可以使用 Any。

let arry: Array<Any> = ["hello", 99, ["key":"value"]]

这样将数组类型定义成 Any 之后我们可以将任意类型添加进数组,也可以从数组中取出的值转换成任意类型。但这样做是十分危险的,取值时一旦类型转换错误再调用该类型的方法后就容易造成不必要的 crash 。

如何处理

如果确实存在这种多类型数据放在同一个数组中的需求时,建议使用带有值的 enum 来处理。

enum TypeOfMyArr {
   case stringValue(String)
   case intValue(Int)
   case dicValue(Dictionary<String, String>)
}
    let array: Array<TypeOfMyArr> = [TypeOfMyArr.stringValue("hello"), TypeOfMyArr.intValue(99), TypeOfMyArr.dicValue(["key":"value"])]
    
    for item in array {
        switch item {
        case let .stringValue(s):
            print(s + "world")
        case let .intValue(i):
            print(i + 1)
        case let .dicValue(dic):
            print(dic)
        }
    }

这样就可以愉快的在数组中使用不同的数据类型了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,192评论 19 139
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 13,160评论 1 51
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 9,481评论 1 10
  • 读经: 《出埃及记》第8章。 经文: 耶和华吩咐摩西说:“你进去见法老,对他说:‘耶和华这样说:容我的百姓去,好侍...
    君自尔出阅读 9,220评论 0 6
  • 姥姥,你还好吗?昨天夜里,我又梦到你了,梦到你和姥爷在天堂里坐在一起晒着太阳,梦到你和姥爷乐呵呵地笑着,我知道,你...
    梅花映雪阅读 3,188评论 9 6

友情链接更多精彩内容