Swift中的枚举如何工作?

时间:2015-08-19 08:58:08

标签: swift enums

我对Swift非常新,而Objective-C也是如此。我正在阅读Apple关于Swift编程的书,并对enum感到困惑。在书中,有一个例子

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.rawValue)
        }
    }
}
let ace = Rank.Ace
let aceRawValue = ace.rawValue
ace.simpleDescription()

显示“ace”,我明白了。但我不明白为什么下面的代码不能以相同的方式工作:

var r:Rank
r.Ace.simpleDescription()

我知道有些东西我没有得到,但我已经多次阅读了本书的这一部分,但仍然没有得到它。 谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

你可以这样做:

var r = Rank.self           //add self here
r.Ace.simpleDescription()   //"ace"

或者您也可以这样使用它:

var r:Rank

r = .Ace

r.simpleDescription()   //"ace"

答案 1 :(得分:0)

  

我知道了。但我不明白为什么下面的代码没有   以同样的方式工作:

var r:Rank 
r.Ace.simpleDescription()

有几件事。

首先,您的第一行只是一个声明。您没有初始化变量。在使用它之前,您需要初始化它。

其次,case Ace, Two, Three, Four ...为您提供Rank可能具有的值变量列表。分配给它时,您只能分配此列表中的值。您的r默认没有任何“Ace”或任何“Two”。甚至在您初始化之后,例如r = .Acer.Ace不是访问r值的正确方法。

所以你需要这样做:

我知道了。但我不明白为什么下面的代码不能以相同的方式工作:

var r:Rank = .Ace
r.simpleDescription()