ios

获取一个枚举的所有Case(译)

2018-08-22  本文已影响2人  lkkwxy

原文地址

我认为我最喜欢Swift 4.2的可能是编译器自动为枚举生成一个 allCases的集合。

如何知道在我的枚举里有多少个Case

知道一个枚举有多少种情况或者去迭代所有的情况这通常是很有用的。在Swift4.2之前,你也许使用一个元编程工具例如Sourcery或者手动的维护这个集合

enum Direction {
  case left
  case right
}

extension Direction {
  static let allItems: [Direction] = [.left, .right]
}

Direction.allItems.count
// 2
Direction.allItems.forEach { print($0) }
// left
// right

手动维护是痛苦的,而且当我为枚举添加额外的Cases,而忘记更新allItems的实现时,他无法按照预期工作

enum Direction {
  case left
  case right
  case up
  case down
}

Direction.allItems.count
// 2 ???

CaseIterable 协议

Swift4.2为我们带来了CaseIterable协议。他们像Equatable,ComparableHashable都是通过编译器自动合成来实现的

你需要做的就是声明你的枚举遵循这个协议

enum Direction: CaseIterable {
  case left
  case right
  case up
  case down
}

编译器提供给你一个包含所有情况叫做allCases的集合

Direction.allCases.count
// 4
Direction.allCases.forEach { print($0) }
// left right up down.

注意:

上一篇 下一篇

猜你喜欢

热点阅读