swift - 比较 swift 中的枚举等级(Swift 书中的练习)

标签 swift enumeration

我刚开始学习编程,正在尝试完成 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"
}

您将得到错误:如果枚举没有原始类型,则枚举大小写不能有原始值

因此每个成员的原始值类型必须与声明的枚举类型相匹配。

来源:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Enumerations.html#//apple_ref/doc/uid/TP40014097-CH12-XID_190

关于swift - 比较 swift 中的枚举等级(Swift 书中的练习),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24536914/

相关文章:

swift - Coredata关系,保存Dictionary

使用 Sinch 和 Swift 进行 iOS 推送通知

json - Swift Alamofire JSON 响应有括号

C# 类属性可枚举

c++ - 如何解决编译器枚举重新声明冲突

Swift 1.2 重新声明 Objective-C 方法

ios - presentedViewController 改变呈现 View Controller 的方向,破坏布局

ios - 快速枚举定义中的方法只会被调用一次还是每次迭代(objective-c)?

c# - 是否有 LINQ 扩展或(一组合理/高效的 LINQ 扩展)确定集合是否至少有 'x' 个元素?

arrays - 为什么 PowerShell 将 `Where` 谓词应用于空列表