gpt4 book ai didi

swift - 从它的类型创建一个枚举的实例

转载 作者:行者123 更新时间:2023-11-28 13:04:29 24 4
gpt4 key购买 nike

我正在寻找一种使用整数类型从整数中获取枚举值的方法。

这是我想做的一个例子;

enum TestEnum: Int {
case A = 0
case B = 1
case C = 2
}

func createEnum<T>(value: Int, type: T.Type) -> T? {
// Some magic here
}

let a = createEnum(0, type: TestEnum.self) // Optional(TestEnum.A)
let b = createEnum(1, type: TestEnum.self) // Optional(TestEnum.B)
let c = createEnum(2, type: TestEnum.self) // Optional(TestEnum.C)
let invalid = createEnum(3, type: TestEnum.self) // nil

我知道你可以这样获取值:

let a = TestEnum(rawValue: 0) // Optional(TestEnum.A)
let b = TestEnum(rawValue: 1) // Optional(TestEnum.B)
let c = TestEnum(rawValue: 2) // Optional(TestEnum.C)
let invalid = TestEnum(rawValue: 4) // nil

不过,我希望能够“存储”要创建的枚举类型(在本例中为 TestEnum),然后稍后根据值创建它,如我的示例所示。

有没有办法在 Swift 中做到这一点?

最佳答案

具有底层类型的枚举符合 RawRepresentableRawValue 作为关联类型的协议(protocol):

func createEnum<T : RawRepresentable >(value: T.RawValue, type: T.Type) -> T? {
return T(rawValue: value)
}

这适用于您的 enum TestEnum: Int { ... } 示例,但不是仅限于 Int 作为基础类型。

enum StrEnum : String {
case X = "x"
case Y = "y"
}

let x = createEnum("x", type: StrEnum.self) // Optional(StrEnum.X)

如果您希望将函数限制为具有基础类型 Int 的枚举,则在通用占位符上添加另一个约束:

func createEnum<T : RawRepresentable where T.RawValue == Int>(value: Int, type: T.Type) -> T? {
return T(rawValue: value)
}

关于swift - 从它的类型创建一个枚举的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33179198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com