📜  Swift – Switch 语句(1)

📅  最后修改于: 2023-12-03 15:20:24.991000             🧑  作者: Mango

Swift – Switch 语句

Swift 语言中的 switch 语句用于基于不同的情况进行条件判断和执行不同的代码块。它与其他编程语言中的 switch 语句类似,但有一些独特的特性。

基本语法

下面是 switch 语句的基本语法:

switch value {
    case pattern1:
        // 满足 pattern1 执行的代码块
    case pattern2, pattern3:
        // 满足 pattern2 或 pattern3 执行的代码块
    default:
        // 如果没有任何情况匹配,则执行 default 块
}
  • value 表示要进行匹配的值。
  • 每个情况都由 case 关键字开始,后面是要匹配的模式。
  • 可以有多个情况使用相同的代码块。
  • 使用 default 关键字指定当没有任何情况匹配时要执行的代码块。
功能和特性
匹配基本类型数据

可以在 case 子句中匹配各种基本类型的数据,例如整数、浮点数、布尔值、字符串等,以及特殊类型如 nil

let number = 42

switch number {
    case 0:
        print("Zero")
    case 1...9:
        print("Single digit")
    case let x where x % 2 == 0:
        print("Even number")
    case _:
        print("Other number")
}
  • 在上述代码中,number 被匹配到不同的情况中。
  • 第一个情况匹配整数 0,第二个情况匹配 1 至 9 的范围。
  • 第三个情况使用 let 关键字和 where 子句,将匹配到的数字赋给 x,并且只有当 x 是偶数时才匹配。
  • 最后一个情况使用 _ 表示任何其他数值。
匹配元组

switch 语句还可以用于匹配元组,每个元素都可以使用不同的模式匹配:

let point = (0, 0)

switch point {
    case (0, 0):
        print("Origin")
    case (_, 0):
        print("On x-axis")
    case (0, _):
        print("On y-axis")
    case let (x, y) where x == y:
        print("Diagonal")
    case let (x, y):
        print("Arbitrary point")
}
  • 在上面的代码中,point 被匹配到不同的情况中。
  • 第一个情况匹配坐标点 (0, 0)
  • 第二个情况使用 _ 忽略第一个元素,只匹配 y 值为 0 的情况。
  • 第三个情况使用 _ 忽略第二个元素,只匹配 x 值为 0 的情况。
  • 第四个情况使用 let 关键字和 where 子句,只有当 x 和 y 值相等时才匹配。
  • 最后一个情况使用 let 关键字捕获元组中的值。
匹配枚举

switch 语句也可以用于匹配枚举类型的值:

enum Direction {
    case north
    case south
    case east
    case west
}

let direction = Direction.north

switch direction {
    case .north:
        print("Go north")
    case .south:
        print("Go south")
    case .east, .west:
        print("Go east or west")
}
  • 在上面的代码中,switch 语句根据 direction 的枚举值进行匹配。
  • 每个情况使用枚举值的简短语法来匹配枚举成员。
匹配可选类型

在 Swift 中,可以使用 switch 语句匹配可选类型:

let optionalNumber: Int? = 42

switch optionalNumber {
    case nil:
        print("No value")
    case let value?:
        print("Value is \(value)")
}
  • 第一个情况用于匹配可选值为 nil 的情况。
  • 第二个情况使用 let 关键字和 ? 运算符来解包可选值,并赋给 value
匹配区间

switch 语句还支持匹配区间:

let score = 85

switch score {
    case 0..<60:
        print("Fail")
    case 60..<70:
        print("Pass")
    case 70..<90:
        print("Good")
    case 90...100:
        print("Excellent")
    default:
        print("Invalid score")
}
  • 在上述代码中,switch 语句根据 score 进行匹配。
  • 第一个情况使用区间 0..<60 来匹配 0 到 59 的分数。
  • 所有其他情况使用类似的方式进行匹配。
总结

switch 语句是 Swift 中一种非常灵活和强大的控制流语句。它可以用于匹配各种类型的值,包括基本类型、元组、枚举、可选类型等。通过巧妙地使用 case 子句、where 子句和其他相关特性,开发者可以编写出更简洁、可读性更好的代码。