我想知道在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语句的工作方式很好奇。
答案 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,则不需要提供自己的~=
。