【问题标题】:Swift • Can Enums have too many Cases?Swift • 枚举可以有太多的案例吗?
【发布时间】:2021-09-25 07:31:06
【问题描述】:

我正在开发一个使用 Enum 的 Swift 应用程序。但是,这个 Enum 会有一堆案例。也许 1,000 甚至更多。

代码

enum Name: Int, CaseIterable {
    case name1
    case name2
    case name3
    // Many more...
    
    var string: String {
        switch self {
            case name1: return "Name 1"
            case name2: return "Name 2"
            case name3: return "Name 3"
            // Many more...
        }
    }
}

问题: 包含 1,000 多个案例的 Enum 是否有效?或者会不会有问题?哪种其他数据结构最适合这种情况?

问题 2: Enum 还计算了带有 Switch-Statements 的属性。超过 1,000 个案例的 Switch-Statement 有什么问题吗?

非常感谢您的帮助!

【问题讨论】:

  • 请提供更多背景信息 - 您需要使用的案例/数据类型。在没有更多信息的情况下,不清楚你想用这个做什么。
  • @TarunTyagi 它只是不同药物的枚举,没什么特别的。它还包含一些计算属性,其中包含 switch 语句。
  • 您通常使用枚举来表示属于同一组的有限数量的元素。对我来说,药物更像是一个无限(不断增长)的集合,所以数组、字典或集合可能更合适。即使这个组是有限的,我认为 1000 对很多人来说也是一种方式,并且给你的代码很难理解和维护。您当然可以将它们分成更小的组,每个组都有一个枚举。
  • @JoakimDanielson 感谢您的详细回答。实际上,名字的数量是巨大的,但也是有限的。用户无法添加或删除名称。你说得对,1000 个案例的枚举很难阅读,但是具有 1000 个元素的列表或字典也不容易阅读?
  • 1000 个元素将成为维护的噩梦。你是如何获得价值的?您是否正在输入它们,从网络呼叫中获取它们。有很多方法可以处理大量项目,包括拥有自己的属性,但将它们全部放在一个枚举中可能是错误的方法。

标签: ios swift iphone enums switch-statement


【解决方案1】:

你可以试试这样的 -

  1. 将已知的有效名称列表存储在 json 资源文件中。
  2. 在您的数据模型上添加一个可失败的初始化程序,根据该 json 中的已知名称列表验证名称值。如果您提供了无效的名称值(在名称 json 中不知道) - 初始化将失败并且您的数据模型将不会被实例化。
  3. 数据模型的 name 属性仍然是 String - 不是枚举大小写。

【讨论】:

    猜你喜欢
    • 2015-02-26
    • 1970-01-01
    • 2017-03-31
    • 2017-12-09
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 2017-08-08
    • 2021-11-14
    相关资源
    最近更新 更多