我已经尝试将数组与数组进行比较,使用if if this:
let ArrayA = ["A", "B"]
if ArrayA == ["A", "B"] {
print("true")
} else {
print("false")
}
结果将是true
,那么我们如何使用switch和case来做到这一点?用Swift语言可以做到这一点吗?
答案 0 :(得分:4)
您可以使用包含where
谓词的案例:
let array = ["A", "B"]
switch array {
case _ where array == ["A", "B"]: print("AB")
case _ where array == ["C", "D"]: print("CD")
default: print("default")
}
如果您真的想要,可以定义一个调用~=
的模式匹配运算符(==
)。 switch
语句查找接受给定模式的模式匹配运算符的定义,以及确定case
是否匹配的候选者:
let array = ["A", "B"]
func ~= <T: Equatable>(pattern: [T], candidate: [T]) -> Bool {
return pattern == candidate
}
switch array {
case ["A", "B"]: print("AB")
case ["C", "D"]: print("CD")
default: print("default")
}
我会 建议不要使用 ,因为我们不清楚这种情况是否正在进行==
检查,{{1 },contains(_:)
等
答案 1 :(得分:2)
使用许多不同类型切换Swift工作,但它只是与开箱即用的数组不匹配。您可以通过重载〜=恰当
来匹配数组func ~=<T: Equatable>(lhs: [T], rhs: [T]) -> Bool {
return lhs == rhs
}
let ArrayA = ["A","B"]
switch ArrayA {
case (["A","B"]):
print("true")
default:
print("false")
}