Swift中是否有更简洁方式将枚举case作为可类型检查的‘类型’引用?
优化Swift Token类型验证的简洁实现
你当前的代码能实现需求,但存在冗余的重复逻辑。可以通过给SymbolToken添加计算属性关联对应的SymbolTokenType,来大幅简化验证逻辑,这是更简洁的纯Swift方案。
优化后代码
enum SymbolTokenType { case river, lake, mountain, meadow, valley, openParen, closeParen, logicalAnd, logicalOr, logicalNot } enum SymbolToken { case river(key: RiverKey?) case lake(key: LakeKey?) case mountain(key: MountainKey?) case meadow(key: MeadowKey?) case valley(key: ValleyKey?) case openParen case closeParen case logicalAnd case logicalOr case logicalNot // 计算属性:集中处理Token到类型的映射 var tokenType: SymbolTokenType { switch self { case .river: return .river case .lake: return .lake case .mountain: return .mountain case .meadow: return .meadow case .valley: return .valley case .openParen: return .openParen case .closeParen: return .closeParen case .logicalAnd: return .logicalAnd case .logicalOr: return .logicalOr case .logicalNot: return .logicalNot } } // 简化后的验证方法 func validateTokenType(validTypes: [SymbolTokenType]) -> Bool { validTypes.contains(tokenType) } // 可选:单个类型验证的便捷方法 func isOfType(_ type: SymbolTokenType) -> Bool { tokenType == type } }
优势说明
- 把类型映射逻辑集中在
tokenType属性中,避免了原方法里重复的contains调用 - 后续新增Token case时,只需在
tokenType的switch中添加一行,维护成本更低 - 可选的
isOfType方法让单个类型验证的调用更直观(比如token.isOfType(.river))
内容的提问来源于stack exchange,提问作者clearlight
相关产品推荐
相关产品推荐

