静态VS枚举应我迅速用

问题描述 投票:0回答:2

的iOS 12,夫特4.2

这两个做同样的事情,哪个更好?

private struct fieldV {
  static let billV = 1
  static let centV = 2
  static let payerV = 3
}

private enum fieldInt: Int {
  case bill
  case cent
  case payers
}

要使用的第一个是一个小更明显,所以我得到了这一点。

percent.tag = fieldV.centV 

VS

percent.tag = fieldInt.cent.rawValue

当然我说的是3个不同的INTS VS单一的诠释,可以有三个值中的一个?但有一个更好的理由使用一个或其他?

swift struct enums static
2个回答
1
投票

结构和枚举是在这个意义上根本不同的:

  1. 像类结构是产品类型。这意味着,代表你需要的所有字段一个struct的对象。比如让我们有两个字段名称和地址的结构员工。在这种情况下的雇员由两个地址和名称定义。
  2. 在另一方面枚举的总和类型。这意味着它们由任何字段的表示。例如,让我们举一个枚举NetworkStatus它可以是成功或失败

请注意,在结构(也类,元组)的信息的表示时,所有的领域,而在枚举信息表示的情况下发生的任何各自领域的。

在你的情况清楚地结构是正确的答案,因为你需要的法案,并分纳税人所有三个领域的代表的完整信息。


1
投票

当你有有限的已知选项,你应该使用枚举。枚举可以CaseIterable,你可以一次使用它的情况all!您可以switch在一个枚举,它会自动跟踪添加和删除的情况下,如果你不使用的情况下default。这些都是不可能的struct或类。即使你想直接使用Int值,而不rawValue你应该考虑使用静态内部枚举是这样的:

private enum Field {
  static let bill = 1
  static let cent = 2
  static let payer = 3
}

至于你的情况的命名,它看起来像Int值是要比较什么的,你应该发送到服务器或等东西,它不是Field本身的一部分。所以,我建议你使用一些计算的财产除外rawValue,而不是!

private enum Field {
    case bill
    case cent
    case payers

    var intValue: Int {
        switch self {
        case .bill: return 1
        case .cent: return 2
        case .payers: return 3
        }
    }
}

这可能会导致你更多的时间和写作,但它更方便的和错误的证明。如果你愿意,你可以添加自定义初始化。

- 还有一件事

在迅速的,你应该考虑使用上驼峰名字类型。 (枚举,结构,类)

© www.soinside.com 2019 - 2024. All rights reserved.