You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 15:36:18