Swift中如何根据输入切换Enum?求枚举重构字符串判断逻辑方案
嘿,我懂你想把字符串判断的switch改成枚举的需求——确实枚举能让代码更安全、易维护,还能彻底避免拼写错误的坑!我来帮你一步步改造这段代码,保证灵活性拉满~
首先先把你原来的代码补全(应该是没写完default分支):
var weightType: String = "kettlebell" func returnWeightLimit() -> Double { switch weightType { case "barbell": return 132.0 case "kettlebell": return 70.5 case "dumbbell": return 115.0 default: return 0.0 } }
接下来用枚举重构,分两步走:
第一步:定义带重量限值的枚举
我们让枚举遵守String协议,这样既能兼容原来的字符串值,又能享受枚举的类型安全:
enum WeightType: String { case barbell case kettlebell case dumbbell // 给每个枚举case绑定对应的重量限值 var weightLimit: Double { switch self { case .barbell: return 132.0 case .kettlebell: return 70.5 case .dumbbell: return 115.0 } } }
第二步:改造原有的变量和函数
现在把字符串类型的weightType改成枚举类型,函数里直接调用枚举的计算属性就行:
// 现在变量是枚举类型,再也不用担心拼写错误了! var weightType: WeightType = .kettlebell func returnWeightLimit() -> Double { // 不用再写冗长的switch,直接返回枚举的weightLimit return weightType.weightLimit } // 测试一下,输出70.5 print(returnWeightLimit())
额外的灵活扩展
如果需要从字符串(比如API返回的字段)转换成枚举,因为我们的枚举遵守了String协议,直接用rawValue初始化就行:
// 从字符串转枚举,自动处理无效值 if let apiWeightType = WeightType(rawValue: "dumbbell") { print(apiWeightType.weightLimit) // 输出115.0 } else { print("未知的重量类型") }
为啥这比原来的switch好?
- 类型安全:再也不会因为手滑把"kettlebell"写成"kettlebel"导致bug,编译器会直接报错
- 扩展性强:以后要加新的重量类型,只需要在枚举里加个case,再补一下
weightLimit的分支就行,函数完全不用改 - 可读性高:枚举的case语义明确,别人看代码一眼就懂有哪些重量类型可选
内容的提问来源于stack exchange,提问作者mlynnerup
相关产品推荐
相关产品推荐

