可以在Swift2的switch语句中比较哪种类型的值

时间:2015-12-17 07:47:09

标签: swift object types switch-statement swift2

我想知道在switch语句中可以比较哪种类型的值。官方文件说:

  

案例可以匹配许多不同的模式,包括区间匹配,元组和转换为特定类型

还有别的吗?我可以在switch语句中比较类类型吗?

假设我有一个A级:

class A {
}
func == (lhs: A, rhs: A) -> Bool { return true }

然后我可以检查A类的两个对象是否相等。但我仍然不能这样做:

var a1 = A(); var a2 = A()
switch a1 {
case a2: //do something 
}

虽然我们很少编写这样的代码,但我仍然对swift中switch语句的工作方式很好奇。

1 个答案:

答案 0 :(得分:3)

Expression Patterns中所述,

  

使用Swift标准库~=运算符将表达式模式表示的表达式与输入表达式的值进行比较。

如果您希望在func ~=(lhs: A, rhs: A)声明中使用自定义类型,则可以定义switch

但我还建议您只使用Equatable协议,实施==,然后您可以撰写if a1 == a2 { ... }

实际上,标准库提供了

public func ~=<T : Equatable>(a: T, b: T) -> Bool

因此,如果您遵守Equatable,则不需要提供自己的~=