【问题标题】:Filter an enum based on case names in swift快速根据案例名称过滤枚举
【发布时间】:2020-12-03 20:43:34
【问题描述】:

我有这个代码:

enum CountryInfoColor : String, CaseIterable {
    case Canada    = "green1"
    case USA       = "green2"
    case Brazil    = "green3"
    case Australia = "purple1"
    case Germany   = "purple2"
    case China     = "purple3"
    case Japan     = "blue1"
    case Mexico    = "blue2"
}

我拥有的枚举超过 1000 行,我正在寻找一种基于案例名称过滤枚举的方法,因为每个案例名称都是一个唯一元素。 这样的事情当然不起作用: var enumArrayFiltered = CountryInfoColor.allCases.filter{ $0.contains("Canada") } 因为 $0 没有成员“包含”。

我知道可以很容易地根据它们的 rawValues 在枚举数组上使用过滤器和包含函数,如下所示:var enumFilteredRawValues = CountryInfoColor.allCases.filter{$0.rawValue.contains("greeen") } 但是基于枚举case本身就不能轻松使用filter和contain函数吗?

【问题讨论】:

    标签: arrays enums swift5


    【解决方案1】:

    您需要为此使用Mirror

    最简单的方法是让这个String初始化器为你处理它:

    // [USA, Australia]
    CountryInfoColor.allCases.filter { String(describing: $0).contains("A") }
    

    【讨论】:

    • 感谢您的回复。我了解如何根据枚举的 rawValue 进行过滤,这不是问题,我正在寻找一种基于案例名称本身而不是 rawValue 进行过滤的方法。例如,所有案例名称中名称为“United”的案例,然后我将继续使用 rawValue 数据。对不起,如果我没有说清楚
    • 请改进问题。现在,我可以在您所写的内容中看到这个问题,但是我们必须做太多的挖掘才能到达那里。你只需要一个更好的例子来说明你真正想要如何过滤。
    猜你喜欢
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    相关资源
    最近更新 更多