for-in循环中这个switch语句有什么问题?

时间:2017-03-04 04:00:29

标签: swift switch-statement for-in-loop

此功能:

let months = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

for month in months {
        switch month {
        case month == 1: print("January")
        case month == 2: print("February")
        case month == 2: print("March")
        default: print("Not Q1")
        }
    }

正在返回此错误:

  
    

“Bool”类型的表达式模式不能匹配“Int”类型的值

  

为什么?

3 个答案:

答案 0 :(得分:0)

更改为:

let months = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

for month in months {
    switch month {
    case 1: print("January")
    case 2: print("February")
    case 3: print("March")
    default: print("Not Q1")
    }
}

答案 1 :(得分:0)

switch语句需要对已经“切换”的变量进行处理。在这种情况下,您在数组月份上放置了一个开关,这是一个整数数组。您在switch语句中的案例是布尔值,因为month == 1的计算结果为true或false;但是这些案例需要是整数值才能使此switch语句生效。因此,将case month == 1: print("January")语句替换为case 1: print("January")应该可以解决问题。修复后,您的代码应该如下所示。

let months = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

for month in months {
    switch month {
    case 1: print("January")
    case 2: print("February")
    case 3: print("March")
    default: print("Not Q1")
    }
}

答案 2 :(得分:0)

要回答关于您为什么会看到该错误的问题,因为switch语句将您正在启用的内容与相同类型的可能值进行比较。在您的示例中,您启用的内容(month)是Int。因此,case值也必须为Int s。 month == 1Bool,而不是Int

以下是switch语句的Swift文档:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/ControlFlow.html