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
相关产品推荐
相关产品推荐

