我是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
}
}
答案 0 :(得分:2)
这被称为"隐含分配的原始价值"你可以在Swift Programming Language Guide:
中阅读相关内容隐式指定的值可以是Int
或String
类型,具体取决于枚举的声明方式。
如果枚举被声明为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"