【问题标题】:Swift enum cannot assign default raw valueSwift 枚举无法分配默认原始值
【发布时间】:2019-05-07 11:42:21
【问题描述】:

示例代码:

enum BestLetters {
    case A
    case B
    case C
    case Default = B
}

Default 案例中的错误:枚举案例的原始值必须是文字

我的理解是枚举原始值仅限于某些类型(整数、字符串、布尔值等)。显然BestLetters 不是这些类型之一,编译器在抱怨。

如何将Default 类型的原始值设置为其他“字母”之一?如果给出任何上下文,这种奇怪语法的原因是我试图模仿我在 obj-c 中看到的东西。

感谢您的帮助。

【问题讨论】:

  • 这将如何使用?可能有助于显示 Objective-C 代码。还要添加一个示例,说明您希望如何使用此默认值。

标签: swift


【解决方案1】:

在 (Objective-)C 中,枚举定义了一组命名的整数常量,它们不需要是不同的:

enum {
    A = 1,
    B = 2,
    C = 99,
    Default = B
};

Swift enum 的 case 表示相互不同的值,并且它们的原始值(如果已分配)必须是唯一的:

enum BestLetters: Int {
    case a = 1
    case b
    case c
    case `default` = 2 // Error: Raw value for enum case is not unique
}

另一方面,Swift 中的枚举是一等类型,因此您可以为此目的定义一个静态属性:

enum BestLetters {
    case a
    case b
    case c
    static let `default` = BestLetters.b
}

(这也是 Swift 导入具有重复值的 C 枚举的方式,比较 touchIDLockout deprecated in iOS 11.0。)

【讨论】:

猜你喜欢
  • 2016-10-10
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 2023-03-20
  • 2020-12-26
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
相关资源
最近更新 更多