Swift中如何将String字符串转换为Enum枚举对应成员?
Swift字符串转枚举成员实现方法
优先方案:指定枚举Raw Value类型为String
你只需要给原枚举声明添加String类型的原始值声明,Swift会自动生成和case名称完全匹配的字符串原始值,同时内置可失败构造器init?(rawValue: String),直接满足转换+校验需求:
// 修改后的枚举定义 enum Numbers: String { case One case Two case Three }
在你的方法中直接调用构造器即可:
func handle(name: String) { // 构造失败返回nil,刚好用来做合法性校验 guard let targetEnum = Numbers(rawValue: name) else { print("当前name不存在对应的枚举成员") return } // 转换成功后即可使用targetEnum print("转换结果:\(targetEnum)") }
备选方案:手动自定义构造器
如果你的枚举已经绑定了其他类型的原始值,不能修改为String类型,可以手动添加自定义转换构造器:
enum Numbers { case One case Two case Three // 自定义可失败构造器 init?(from string: String) { switch string { case "One": self = .One case "Two": self = .Two case "Three": self = .Three default: return nil } } }
方法中使用方式:
func handle(name: String) { guard let targetEnum = Numbers(from: name) else { print("非法的name参数") return } // 后续业务逻辑 }
- 注意事项:
- 上述实现默认大小写严格匹配,如果你需要忽略大小写校验,可以将传入的字符串和枚举的case名统一转换为大写/小写后再做匹配
- 优先选择第一种方案,无需手动维护映射关系,新增/删除枚举case时自动同步,维护成本更低
内容的提问来源于stack exchange,提问作者Prudhvi
相关产品推荐
相关产品推荐

