首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Switch语句来循环Swift中的所有case

Switch语句来循环Swift中的所有case
EN

Stack Overflow用户
提问于 2019-06-14 16:17:56
回答 1查看 966关注 0票数 2

在Swift中,我有一个enum和switch-statement,如下所示:

代码语言:javascript
复制
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案例的打印结果应该是:

代码语言:javascript
复制
sweep
clean
wash

我想出了一个主意:

代码语言:javascript
复制
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")
}

并想知道是否有更好的解决方案。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-14 16:28:20

您可以对枚举使用CaseIterable,如果使用.all,则只需迭代所有大小写(.all除外),如下所示:

代码语言:javascript
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56594168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档