我刚开始学习编程,正在尝试完成 Swift 编程书中的实验。
它要求““编写一个函数,通过比较两个 Rank 值的原始值来比较它们。”
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.toRaw())
}
}
我写了下面的函数
func compare(a:Rank,b:Rank) -> Bool{
return a.toRow() > b.toRow()}
我知道这是错误的,因为 toRow() 是 Rank 成员的函数。但是不知道Rank的成员数据类型是什么。
最佳答案
您的代码中有一个拼写错误,可能会阻止它正确编译。该方法是 toRaw
而不是 toRow
。
您更大的问题是“Rank 成员的数据类型是什么”。练习以下列方式声明 Rank:enum Rank: Int
因此类型为 Int。
不幸的是,The Swift Programming Language 中的措辞很容易让人忽视,但是在声明具有原始值成员的枚举和具有关联值(或没有值)。
这是书中原始枚举的示例:
enum ASCIIControlCharacter: Character { // note type declaration
case Tab = "\t"
case LineFeed = "\n"
case CarriageReturn = "\r"
}
关键是类型声明 : Character
,它跟在 Enum 的名称之后。如果您尝试这样声明它:
enum ASCIIControlCharacter { // missing type declaration
case Tab = "\t" // won't work!
case LineFeed = "\n"
case CarriageReturn = "\r"
}
您将得到错误:如果枚举没有原始类型,则枚举大小写不能有原始值
。
因此每个成员的原始值类型必须与声明的枚举类型相匹配。
关于swift - 比较 swift 中的枚举等级(Swift 书中的练习),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24536914/