知识卡片
关联值让枚举成为代数数据类型
内容
Swift枚举的成员不仅可以像传统枚举一样只是几个命名常量,还可以各自携带类型不同的关联数据——比如case square(side: Double)和case rectangle(width: Double, height: Double),前者关联一个浮点数,后者关联一对浮点数,某个成员甚至可以完全没有关联值(如case point)。这让枚举实际上表达的是”这几种情况里必居其一,且每种情况自带各自需要的数据”,是函数式语言里”代数数据类型”(和类型/sum type)在Swift里的落地形式。访问关联值要靠switch配合[[值绑定与where子句构成的模式匹配]](如case let .square(side: side))解包,编译器会确保每种成员的数据都以正确类型呈现,不需要像传统枚举那样另开一个字段去装载”可能有可能没有”的附加信息。
参考来源
《Swift编程权威指南》第14章《枚举》