在Swift中,我有一个enum
和开关声明,如下所示:
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
,如何修改开关语句,使其循环所有情况。
这样.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")
}
,想知道是否还有更多的“美丽”解决方案。 谢谢。
答案 0 :(得分:1)
您可以使用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)