鉴于外部枚举,我无法改变:
enum MyEnum {
case first
case second
}
我如何才能最好地使这个RawRepresentable,或者至少可以转换为Int(或String)?
我可以写一个模仿rawValue的扩展,但这感觉很笨拙:
extension MyEnum {
enum EnumError: Error {
case invalidValue
}
init (rawValue: Int) throws {
switch rawValue {
case 0:
self = .first
case 1:
self = .second
default:
throw EnumError.invalidValue
}
}
var rawValue: Int {
switch self {
case .first:
return 0
case .second:
return 1
}
}
}
有更好的方法吗?感觉应该有一个更好的解决方案...
答案 0 :(得分:2)
这很有效,只是测试了它。希望这会帮助你!
enum MyEnum {
case first
case second
}
extension MyEnum {
enum MyExtendedEnum:Int {
case first
case second
}
}
无论如何它的代码更清晰一些,现在你的电话就是:
let myVar = MyEnum.MyExtendedEnum.RawValue()