我对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()
我知道有些东西我没有得到,但我已经多次阅读了本书的这一部分,但仍然没有得到它。 谢谢你的帮助!
答案 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 = .Ace
,r.Ace
不是访问r
值的正确方法。
所以你需要这样做:
我知道了。但我不明白为什么下面的代码不能以相同的方式工作:
var r:Rank = .Ace
r.simpleDescription()