gpt4 book ai didi

swift - 在 Swift 中,有没有一种方法可以确定枚举是否基于某种类型(例如 String)?

转载 作者:行者123 更新时间:2023-11-28 06:43:31 26 4
gpt4 key购买 nike

例如,为了为 NSValueTransformer 编写通用代码,我需要能够检查枚举是否为 String 类型。即:

enum TestEnum: String {
case Tall
case Short
}

我对可以与 guard 语句一起使用的测试特别感兴趣。大致如下:

guard let e = myEnum as <string based enum test> else {
// throw an error
}

请注意,并非所有枚举都有原始值。例如:

enum Test2Enum {
case Fat
case Slim
}

因此不能单独使用对原始值类型的检查。

编辑

经过进一步调查,很明显 NSValueTransformer 不能用于转换 Swift 枚举。请参阅我对马特回答的第二条评论。

最佳答案

首先,它是您的枚举,所以您不能不知道它们是什么类型。其次,您不会收到一个枚举类型,而是一个枚举实例。第三,即使你坚持假装不知道这个枚举是什么类型,也很容易创建一个只能用具有原始值的枚举调用的函数,并检查原始值是什么类型:

enum E1 {
case One
case Two
}
enum E2 : String {
case One
case Two
}
enum E3 : Int {
case One
case Two
}

func f<T:RawRepresentable>(t:T) -> Bool {
return T.RawValue.self == String.self
}

f(E3.One) // false
f(E2.One) // true
f(E1.One) // compile error

关于swift - 在 Swift 中,有没有一种方法可以确定枚举是否基于某种类型(例如 String)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37233330/

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