如何从枚举中获取字符串

时间:2019-04-13 18:26:27

标签: swift

我试图在枚举中组织一堆字符串参数。这样我就可以排除错别字的可能性。

enum CompassPoint: String {
case n = "North"
case s = "South"
case e = "East"
case w = "West"
}

如果我这样做,则需要使用.rawValue来访问字符串。那太丑了。

如果我这样做:

enum CompassPointAlt: String {
case n
case s
case e
case w

  var str: String {
    switch self {
    case .n: return "North"
    case .s: return "South"
    case .e: return "East"
    case .w: return "West"
    }
  }
}

我必须使用.str属性来获取值。这在视觉上更加明确,但声明繁琐。

必须有更好的方法。有人给我小费吗? 谢谢

2 个答案:

答案 0 :(得分:2)

您可以进行以下更改:

import Foundation

enum Test: String, CustomStringConvertible {
    case n = "North"
    case s = "South"
    case e = "East"
    case w = "West"

    var description: String {
        return self.rawValue
    }
}

print("Enum: \(Test.n)") // Prints: Enum: North

CustomStringConvertible使您可以在description变量中运行代码,而无需在要转换为字符串时显式引用它。如果您不需要枚举具有上面类似的HiBye之类的自定义关联值,并且希望将类型名打印出来,那么就可以做到这一点了:

import Foundation

enum TestSmall {
     case North
     case South
}

print("Enum: \(TestSmall.North)") // prints: Enum: North

答案 1 :(得分:1)

如果您最想将枚举用于常量,则可以将static与enum结合使用

enum CompassPoint {
    static let n = "Nort"
    static let s = "South"
    static let e = "East"
    static let w = "West"
}