有没有办法在Swift中使用switch case将数组与数组进行比较?

时间:2017-07-13 01:50:46

标签: ios swift swift3

我已经尝试将数组与数组进行比较,使用if if this:

let ArrayA = ["A", "B"]

if ArrayA == ["A", "B"] {
   print("true")
} else {
   print("false")
}

结果将是true,那么我们如何使用switch和case来做到这一点?用Swift语言可以做到这一点吗?

2 个答案:

答案 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")
}