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

Swift中如何为自动生成的嵌套枚举实现简写语法?

实现State枚举的简写语法

针对你自动生成的嵌套枚举结构,要实现let state: State = .WA这种简写,可以通过以下两种方式解决:

1. 手动添加静态属性(最直接)

给State扩展添加对应KnownStates每个case的静态属性,直接映射到.known关联值:

extension State {
    static let AK = State.known(.AK)
    static let AL = State.known(.AL)
    static let ON = State.known(.ON)
    static let WA = State.known(.WA)
    // 其他KnownStates的case依次补充
}

这样就能直接使用简写语法:

// 原有KnownStates的简写保留
let knownState: KnownStates = .WA
// State类型的简写现在生效
let state: State = .WA

2. 动态成员查找(适合case数量多的场景)

如果KnownStates遵循RawRepresentable(比如rawValue为String类型),可以用@dynamicMemberLookup实现自动映射,不用手动写每个case:

@dynamicMemberLookup
extension State {
    subscript(dynamicMember member: String) -> State {
        guard let knownState = KnownStates(rawValue: member) else {
            // 根据业务需求处理未知情况,比如返回.unknown(nil)或抛出错误
            return .unknown(nil)
        }
        return .known(knownState)
    }
}

使用方式和第一种一致,同样支持let state: State = .WA。

关于你之前的扩展失败原因

你写的初始化器参数类型和枚举case名称不匹配:参数用了Components.Schemas.KnownStateOrProvince,但实际应该是KnownStates;赋值时写的.KnownStateOrProvince(state)也不对,正确的case名称是.known。

内容的提问来源于stack exchange,提问作者CalebK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:32:46