Swift枚举案例声明语法

时间:2016-02-15 04:40:39

标签: swift enums

我是Swift的新手。下面的代码来自" swift编程语言2.1"。我注意到在宣布" case" for" enum Rank:Int",使用的书

case Two = 2, Three, Four, Five, Six, Seven, Eight, Nine, Ten

我认为它相当于

case Two = 2,
case Three = 3,
....
case Ten = 10

我的假设是否正确?如果是的话,这是什么样的语法?还有其他可以使用的情况吗?

struct BlackjackCard {
    enum Suit: Character {
        case Spades = "♠", Hearts = "♡", Diamonds = "♢", Clubs = "♣"
    }

    enum Rank: Int {
        case Two = 2, Three, Four, Five, Six, Seven, Eight, Nine, Ten
        case Jack, Queen, King, Ace
        struct Values {
            let first: Int, second: Int?
        }
        var values: Values {
            switch self {
            case .Ace:
                return Values(first: 1, second: 11)
            case .Jack, .Queen, .King:
                return Values(first: 10, second: nil)
            default:
                return Values(first: self.rawValue, second: nil)
            }
        }
    }
    let rank: Rank, suit: Suit
    var description: String {
        var output = "suit is \(suit.rawValue),"
        output += " value is \(rank.values.first)"
        if let second = rank.values.second {
            output += " or \(second)"
        }
        return output
    }
}

1 个答案:

答案 0 :(得分:2)

这被称为"隐含分配的原始价值"你可以在Swift Programming Language Guide

中阅读相关内容

隐式指定的值可以是IntString类型,具体取决于枚举的声明方式。

如果枚举被声明为Int类型,则未明确分配的任何值将变为"一个大于前一个案例"。如果没有显式赋值,则第一个枚举案例的值为0,后跟1,2,3等。

enum Foo: Int {
    case Bar, Baz, Boz  // values are 0, 1, 2 respectively
}

访问"原始值"显式地,您使用Swift提供的名为rawValue的枚举成员:

let anInt = Foo.Bar.rawValue // anInt == 0

如果枚举是String类型,则会隐式为该值指定案例名称,因此:

enum Foo: String {
    case Bar, Baz, Boz
}

原始值是" Bar"," Baz"和" Boz"。

请注意,您可以通过在指定大小写的位置显式设置它们来覆盖任何这些值,例如:

enum Foo: String {
    case Bar = "Something"
    case Baz = "Something else"
    case Boz  // implicitly assigned "Boz"
}

并且在任何一种情况下,rawValue都是这样获得的:

let aString = Foo.Bar.rawValue // "Something"