知识卡片

枚举关联值是带数据的标签联合

专业/工作 · 715

内容

C 语言的枚举只是给一组整数取了个好记的名字,Swift 的枚举可以让每个 case 携带各自类型、各自结构的关联数据——比如同一个条形码枚举里,UPCA 分支携带四个整数元组,QRCode 分支携带一个字符串,两者结构完全不同。这类似函数式语言里的可辨识联合/标签联合:用一个类型统一表达”这里有几种可能形态,每种形态附带自己专属的数据”,配合 switch 的模式匹配把不同形态和各自数据一次性解构出来,比”一个字段表示类型 + 另外几个字段按类型解释”的传统结构体设计更难写出因为忘记检查类型标记而误读了错误字段这类 bug。

参考来源

《Swift全解析:新式iOS实战开发》第9章《Swift枚举》