- 结合struct使用
struct Children {
var age: Int
}
extension Children {
var hasGoToSchool: Bool {
if case 0..<3 = age {
return false
}
return true
}
}
调用:
let jack = Children(age: 4)
print("Jack has go to school: \(jack.hasGoToSchool)")
结果:
Jack has go to school: true
- 结合enum使用
enum JobElement<TaskID> {
case next(TaskID)
case error
case completed
}
extension JobElement {
var currentTaskID: TaskID? {
if case .next(let taskId) = self {
return taskId
}
return nil
}
}
调用:
let t = JobElement<UInt>.completed
print("Current task id: \(t.currentTaskID)")
结果:
Current task id: nil
Current task id: Optional(3)
- 结合数组
let cs = [1, 2, 3]
for case 1 in cs {
print("current index: 0")
}
结果:
current index: 0
- 结合数组和枚举
enum Medias {
case music(name: String, author: String)
case movie(name: String, author: String)
case book(name: String)
}
let medias: [Medias] = [.movie(name: "天下无贼", author: "张艺谋"),
.book(name: "朝花夕拾"),
.book(name: "围城"),
.music(name: "江南", author: "cc")
]
for case .book(name: "三体") in medias {
print("三体") // 匹配不上,无输出
}
// 等价于
for case let .book(name: name) in medias where name == "围城" {
print("围城")
}
结果:
围城
在不知道name是什么的时候,使用let去匹配
for case let .book(name: name) in medias {
print(name)
}
// 等价于
for case .book(name: let name) in medias {
print(name)
}
结果都是:
朝花夕拾
围城
网友评论