在Swift中,我有一个enum和switch-statement,如下所示:
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-statement,使其循环所有情况。因此.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")
}并想知道是否有更好的解决方案。谢谢。
发布于 2019-06-14 16:28:20
您可以对枚举使用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)https://stackoverflow.com/questions/56594168
复制相似问题