swift 获取enum所有值

CaseIterable (2018 09 20 更新)

1
2
3
4
5
6
enum Beverage: CaseIterable {
case coffee, tea, juice
}
let numberOfChoices = Beverage.allCases.count
print("\(numberOfChoices) beverages available")
// Prints "3 beverages available"

來自 swift API

EnumCollection (swift4.2失效)

协议

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public protocol EnumCollection: Hashable {
static func cases() -> AnySequence<Self>
static var allValues: [Self] { get }
}

public extension EnumCollection {

public static func cases() -> AnySequence<Self> {
return AnySequence { () -> AnyIterator<Self> in
var raw = 0
return AnyIterator {
let current: Self = withUnsafePointer(to: &raw) { $0.withMemoryRebound(to: self, capacity: 1) { $0.pointee } }
guard current.hashValue == raw else {
return nil
}
raw += 1
return current
}
}
}

public static var allValues: [Self] {
return Array(self.cases())
}
}

enum

1
2
3
enum ABC: String, CaseIterable {
case a, b, c
}

使用

1
ABC.allCases.map { $0.rawValue }

鸣谢

本文标题:swift 获取enum所有值

文章作者:史彦超

发布时间:2018年09月06日 - 22:09

最后更新:2021年07月20日 - 16:07

原始链接:https://doingself.github.io/2018/09/06/swift-%E8%8E%B7%E5%8F%96enum%E6%89%80%E6%9C%89%E5%80%BC/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Donate comment here