《swift2.0 官方教程中文版》 第2章-20嵌套类型


import Foundation


/*嵌套类型实例***********************************************/


//下面这个例子定义了一个结构体 BlackjackCard (二十一点),用来模拟 BlackjackCard 中的扑克牌点数。jackCard 结构体包含2个嵌套定义的枚举类型 Suit Rank

struct BlackjackCard {

    // 嵌套定义枚举类型Suit

    enum Suit: Character {

        case Spades = "1",Hearts = "2", Diamonds = "3", Clubs = "4"

    }

    

    // 嵌套定义枚举型Rank

    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)

            }

        }

    }

    

    // BlackjackCard的属性和方法

    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

    }

}


//枚举型的 Suit 用来描述扑克牌的四种花色,并分别用一个 Character 类型的值代表花色符号。

//枚举型的 Rank 用来描述扑克牌从 Ace ~10, J,Q,K ,13张牌,并分别用一个 Int 类型的值表示牌的面值。(这个 Int 类型的值不适用于  Ace, J, Q, K 的牌)

let theAceOfSpades = BlackjackCard(rank: .Ace, suit: .Spades)

print("theAceOfSpades: \(theAceOfSpades.description)")

// 打印出 "theAceOfSpades: suit is ?, value is 1 or 11"


//尽管 Rank Suit 嵌套在 BlackjackCard ,但仍可被引用,所以在初始化实例时能够通过枚举类型中的成员 名称单独引用。在上面的例子中 description 属性能正确得输出对 Ace 牌有111两个值。




/*嵌套类型的引用***********************************************/

//在外部对嵌套类型的引用,以被嵌套类型的名字为前缀,加上所要引用的属性名:

let heartsSymbol = BlackjackCard.Suit.Hearts.rawValue

print("heartsSymbol is \(heartsSymbol)")

// 红心的符号 "?"


//对于上面这个例子,这样可以使 Suit , Rank , Values 的名字尽可能的短,因为它们的名字会自然的由定义 它们的上下文来限定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值