Swift编程语言枚举实验的解释

时间:2017-07-29 22:16:00

标签: swift enums

我在研究同一主题时首先偶然发现了这个问题: The Swift Programming Language Enumerations Experiment

我正在研究这个,但我的问题是没有一个贡献者真正解释他们的答案如何操纵枚举数据的机制。此外,最重要的答案似乎是过时的,错误的等等。也许我错过了一些东西,因为我只是在学习这门语言。如果是这样,有人可以解释我所缺少的内容或提供更详细的替代答案吗?

1 个答案:

答案 0 :(得分:1)

enum Rank: Int {
    case Ace = 1
    case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
    case Jack, Queen, King
    func simpleDescription() -> String {
        switch self {
        case .Ace:
            return "Ace"
        case .Jack:
            return "Jack"
        case .Queen:
            return "Queen"
        case .King:
            return "King"
        default:
            return String(self.toRaw())
        }
    }
}

这是问题中定义的枚举。查看定义后,您可以看到其原始值将是一个整数。原始值有两个要求

1)原始值可以是字符串,字符或任何整数或浮点数类型。

2)每个原始值在其枚举声明中必须是唯一的。

在该示例中,您可以看到Ace的枚举大小写的原始值为1,它符合枚举定义中定义的类型。由于其余的案例没有定义原始值,因此Swift会明智地分配一个原始值,每个案例比前一个案例多一个。在这种情况下,由于第一个案例明确用1表示,后续案例将是2,3等。 如果没有明确说明第一种情况,则会为其指定值0,并且以下情况都会增加该原始值。

在程序周围传递枚举时,您可以使用其类型而不是原始值。

compareRanks(rankA: Rank, rankB: Rank)

枚举有一个名为rawValue的属性,它将返回与枚举案例相关联的原始值。因此,在您链接的代码示例中,使用此值可以比较两个枚举,以确定它们的等级是否相等。

func compareRanks(rankA: Rank, rankB: Rank) -> Bool {
        return rankA.rawValue == rankB.rawValue
}

在Swift的早期版本中,有一个名为toRaw()的方法返回原始值,但现在,rawValue是一个将返回原始值的属性