在 Swift 中,我有一个enum
和 switch-语句,如下所示:
enum Job {
case all
case sweep
case clean
case wash
}
let job: Job = .all
switch job {
case .all:
print("should do all the jobs below")
case .sweep:
print("sweep")
case .clean:
print("clean")
case .wash:
print("wash")
}
我的问题是,如果给定job
.all
,我如何修改 switch-语句,以便它循环所有情况。因此,.all
案例的打印结果应为:
sweep
clean
wash
我想出了一个主意:
switch job {
case .all: fallthrough
case .sweep:
print("sweep")
if job == .all { fallthrough }
case .clean:
print("clean")
if job == .all { fallthrough }
case .wash:
print("wash")
}
并想知道是否有更"美丽"的解决方案。谢谢。
您可以将
CaseIterable
用于枚举,如果是这样,.all
只是遍历所有情况(.all
除外(,如下所示:
enum Job: CaseIterable {
case all, sweep, clean, wash
}
func sweep() {
print("sweep")
}
func clean() {
print("clean")
}
func wash() {
print("wash")
}
let job: Job = .all
func doJob(job: Job) {
switch job {
case .all:
Job.allCases.forEach({
switch $0 {
case .all:
break
default:
doJob(job: $0)
}
})
case .sweep:
sweep()
case .clean:
clean()
case .wash:
wash()
}
}
doJob(job: job)