【发布时间】:2020-07-10 14:00:22
【问题描述】:
我想通过选择不同的枚举案例来限制 Swift 中的泛型类型。
下面是一个代码示例:
enum Test {
case T1
case T2
}
enum T1 {
case one
case two
}
enum T2 {
case three
case four
}
indirect enum Foo<T> {
case empty
case cons(T, Foo<T>)
}
let x: Foo<T1> = .cons(.one, .empty)
我有一个第一个枚举,其中包含 T1 和 T2 的两个案例。
我试图将 Foo Enum 中的类型 T 限制为具有可用类型的集合,在我的示例中为 T1 和 T2 。
当我声明x 时,允许的类型是T1 或T2 包含在Test 中,而不是其他类型。
因此,只能允许 Enum Test 中的类型。
我的问题:是否可以使用我的 Enum 来约束泛型类型?如果是,如何? 不然怎么办?
【问题讨论】:
-
重申我认为您要问的内容...是否可以有一个泛型类型可以是 A 或 B 或 C 类型,但不能是其他类型。答案是否定的。您可以约束到协议或类,或基于协议的关联类型
-
感谢您的回答,您理解我的问题。我可以用协议做这种事情吗?
-
“这种东西”是什么意思?如果你的意思是,你能限制一个协议,那么是的 - 这正是我在评论中所说的。也许我误解了你在问什么......
-
对不起,我必须更准确。我想知道我是否可以通过协议限制我想要的方式(所以 T1 和 T2)。想象一下我可以有10种不同的类型来约束,我该怎么做?