原始值与 CaseIterable
学习由 String、Int 或其他 RawRepresentable 类型支持的枚举,以及 allCases。
原始值与 CaseIterable 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。
欢迎
Swift 枚举可以拥有*原始值*——与每个枚举成员一起存储的字面值。遵循 `CaseIterable` 后,您会自动获得包含所有枚举成员的集合。
原始值枚举
```swift
enum Direction: String {
case north = "N"
case south = "S"
case east = "E"
case west = "W"
}
print(Direction.north.rawValue) // "N"
```
自动递增的整数原始值
```swift
enum Planet: Int {
case mercury = 1
case venus // 2 (auto)
case earth // 3
case mars // 4
}
print(Planet.earth.rawValue) // 3
```
字符串原始值自动命名
```swift
enum Color: String {
case red, green, blue
}
print(Color.blue.rawValue) // "blue" — auto-named
```
使用字符串原始值时,如果省略赋值,原始值就等于枚举成员名称。
可失败的原始值初始化器
```swift
if let dir = Direction(rawValue: "N") {
print(dir) // Direction.north
}
let invalid = Direction(rawValue: "X") // nil
```
自动生成的可失败初始化器会在原始值无法识别时返回 nil。
CaseIterable
```swift
enum Season: CaseIterable {
case spring, summer, autumn, winter
}
print(Season.allCases) // [.spring,.summer,.autumn,.winter]
print(Season.allCases.count) // 4
```
遍历所有枚举成员
```swift
for season in Season.allCases {
print(season)
}
let picker = Season.allCases.map { "\($0)".capitalized }
```
带原始值的 CaseIterable
```swift
enum Suit: String, CaseIterable {
case hearts="♥", diamonds="♦", clubs="♣", spades="♠"
}
print(Suit.allCases.map { $0.rawValue })
// ["♥","♦","♣","♠"]
```
用于 Codable 的原始值
字符串原始值枚举可以与 `Codable` 无缝协作:
```swift
enum Status: String, Codable { case active, inactive, pending }
struct User: Codable { var status: Status }
// JSON "active" decodes to .active automatically
```
用于标志位掩码的原始值
```swift
struct Permission: OptionSet {
let rawValue: Int
static let read = Permission(rawValue: 1 << 0)
static let write = Permission(rawValue: 1 << 1)
static let execute = Permission(rawValue: 1 << 2)
}
var p: Permission = [.read, .write]
print(p.contains(.read)) // true
```
快速检查
哪个协议可以通过 `allCases` 访问所有枚举成员?
回顾
要点:
• 原始值:`enum E: String { case a = "x" }`
• 整数原始值会自动递增;字符串原始值默认为枚举成员名称
• `init?(rawValue:)` 会自动生成,并且是可失败的
• `CaseIterable` 提供 `.allCases` 静态属性
• 组合使用 `String, CaseIterable`,即可用于菜单和选择器
下一节:关联值。
常见问题解答
「原始值与 CaseIterable」课时是免费的吗?
是的 — 「原始值与 CaseIterable」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。
「原始值与 CaseIterable」这节课中我会学到什么?
学习由 String、Int 或其他 RawRepresentable 类型支持的枚举,以及 allCases。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Swift Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「原始值与 CaseIterable」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Swift Academy 课中编写并运行代码吗?
能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 原始值与 CaseIterable
- 用于丰富数据的关联值
- 间接枚举与递归结构
- 使用枚举建模状态机