Swift枚举定义与语法教程

Swift 的枚举功能,真的是写代码时候的宝藏工具。想表达一组固定的值?用枚举就对了。Swift 里的枚举不光能列出几个 case,还能塞进去额外的数据,比如圆的半径、正方形的边长之类的。嗯,是不是比你想的强大多了?

枚举的语法也挺直观的,用enum加上case就能定义。比如定义颜色:

enum Color {
  case red
  case green
  case blue
}

是不是像你在 JavaScript 里写对象?

还有更高级的玩法,比如关联值。你可以这样写一个图形枚举:

enum Shape {
  case circle(radius: Double)
  case square(sideLength: Double)
}

嗯,看起来就清爽。你再加个area()方法,计算图形面积也方便:

extension Shape {
  func area() -> Double {
    switch self {
    case .circle(let radius):
      return Double.pi * radius * radius
    case .square(let sideLength):
      return sideLength * sideLength
    }
  }
}

,你要是想让枚举和其他类型玩得更溜,还可以加上原始值

enum ZodiacSign: String {
  case aries = "白羊座"
  case taurus = "金牛座"
}

直接拿.rawValue就能读出对应的字符串,挺方便的。

还有一个小技巧:在switch里配合let,解构关联值超好用。比如:

let myShape = Shape.square(sideLength: 5)
switch myShape {
case .circle(let radius):
  print("这是一个半径为\(radius)的圆")
case .square(let sideLength):
  print("这是一个边长为\(sideLength)的正方形")
}

,如果你在乎枚举值的比较,还可以让它们实现Equatable协议:

extension Shape: Equatable {
  static func ==(lhs: Shape, rhs: Shape) -> Bool {
    switch (lhs, rhs) {
    case (.circle(let l), .circle(let r)): return l == r
    case (.square(let l), .square(let r)): return l == r
    default: return false
    }
  }
}

,Swift 的枚举功能,真的是灵活又实用。用好了,不光代码清晰,逻辑也更健壮。如果你正想提升 Swift 基础,这个教程蛮值得一看。如果你对其他语言的枚举也感兴趣,可以看看Delphi 枚举数据类型特性或者C 语言里的枚举类型,做个对比会更有感觉。

rar 文件大小:31.76MB