Swift 枚举

Table of Contents

1 enmu

枚举里竟然可以有方法

如果指定一个枚举是Int的。则不需要指定每一项的原始值(raw值,可以使用toRaw得到) 如果指定一个枚举是非Int的。则必须指定每一项的原始值(raw值,可以使用toRaw得到),否则每一项没有Row值。 如果没有指定一个枚举的类型,则每一项没有Raw值,只能使用枚举中的函数来返回每一项的实际意义。

enum Suit : String{
    case Spades = "a", Hearts = "b", Diamonds="c", Clubs="d" // 因为是String类型的。所以必须指定“a”,“b”。。
    func simpleDescription() -> String {
        switch self {
        case .Spades:
            return "spades"
        case .Hearts:
            return "hearts"
        case .Diamonds:
            return "diamonds"
        case .Clubs:
            return "clubs"
        }
    }

}
let hearts = Suit.Hearts
let heartsDescription = hearts.simpleDescription()
let dd = hearts.toRaw()                   // 不然此处会提示 hearts没有toRow这个方法。
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())
        }
    }
}
let ace = Rank.Ace

let aceRawValue = ace.toRaw()
let a = ace.simpleDescription()

let dd = Rank.fromRaw(50)  // Rank 不存在50个元素,但这个表达式不会报错,而是把dd设置为nil。
let cc = dd!.simpleDescription()// 所以dd是一个Optional的值。在使用之前需要使用!来解包。

if let convertedRank = Rank.fromRaw(3) {   //或者使用这种方式
    let threeDescription = convertedRank.simpleDescription()
}

Author: weikent (weishijian@weikents-MacBook-Air.local)

Date:

Emacs 24.4.1 (Org mode 8.2.10)

Validate