我想知道可以在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
}
尽管我们很少编写这样的代码,但我仍然对switch语句在Swift中的工作方式非常好奇。
如表达模式中所述,
使用Swift标准库
~=
运算符将表达式模式表示的表达式与输入表达式的值进行比较。
您可以定义func ~=(lhs: A, rhs: A)
是否希望在switch
语句中使用自定义类型。
但我也建议您简单地使用Equatable
协议,实施==
,然后编写if a1 == a2 { ... }
。
实际上,标准库提供了
public func ~=<T : Equatable>(a: T, b: T) -> Bool
因此,如果您符合Equatable,则无需提供自己的~=
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句