使用switch语句循环Swift中的所有情况

时间:2019-06-14 08:17:56

标签: swift enums switch-statement

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

,想知道是否还有更多的“美丽”解决方案。 谢谢。

1 个答案:

答案 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)