知识卡片

switch枚举全覆盖的面向未来设计

专业/工作 · 748

内容

对枚举类型做switch时,[[switch必须全覆盖且默认不穿透]]的规则会更进一步:编译器清楚知道该枚举所有可能的成员,只要每个成员都有对应分支就算全覆盖,不需要default。书中特别建议不要为了图省事加default分支——一旦后续给枚举新增一个成员(如给对齐方式加上”两端对齐”),带default的旧switch会静默地把新成员归到默认分支,代码能编译通过但产生错误结果;而老老实实列出每个成员的switch会在新增成员后直接编译失败,逼着开发者去处理所有调用点。这是刻意放弃”看起来更省代码”的写法,换取”新增一个枚举成员时编译器帮你找出所有需要跟进修改的地方”的安全网。

参考来源

《Swift编程权威指南》第14章《枚举》