作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 Swift 的新手。下面的代码来自“the swift programming language 2.1”。我注意到在为“enum Rank: Int”声明“case”时,这本书使用了
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
}
}
最佳答案
这称为“隐式分配的原始值”,您可以在 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
的枚举成员:
让 anInt = Foo.Bar.rawValue//anInt == 0
如果枚举是 String
类型,则该值被隐式分配给 case 的名称,因此:
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"
关于Swift 枚举大小写声明语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35401603/
我是一名优秀的程序员,十分优秀!