switch 语句以循环 Swift 中的所有案例



在 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)

最新更新