寒城攻略:Listo 教你 25 天学会 Swift 语言 - 21 Nested Types

import Foundation


//***********************************************************************************************

//1.Nested Types(类型嵌套)

//_______________________________________________________________________________________________

//介绍

//枚举类型常被用于实现特定类或者结构体的功能。我们可以在多种变量环境中方便的定义通用的结构体或者类,Swift 支持枚举,类,结构体为支持嵌套类型


//***********************************************************************************************

//2.Nested Types in Action(类型嵌套实例)


    enum Rank: Int{                 //嵌套定义枚举类型 Rank,枚举型的 Rank 用来描述扑克牌从 Ace~10,J,Q,K,13 张牌,并分别用一个 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{         //枚举 Rank 中的方法

        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.toRaw(), second: nil)

            }

        }

    }

    

    let rank: Rank                  //结构体 BlackjackCard 的属性和方法

    let suit: Suit

    var description: String{

        var output = "suit is \(suit.toRaw()),"

        output += " value is \(rank.values.first)"

        if let second = rank.values.second {

            output += " or \(second)"

        }

        return output

    }

}

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

println("the AceOfSpades: \(theAceOfSpades.description)")      //尽管 Rank Suit 嵌套在 BlackjackCard ,但仍可被引用,所以在初始化实例时能够通过枚举类型中的成员名称(.Ace .Spades)单独引用


//***********************************************************************************************

//3.Referring to Nested Types(类型嵌套的引用)

//_______________________________________________________________________________________________

//实例代码演示类型嵌套的引用

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

let heartsSymbol = BlackjackCard.Suit.Hearts.toRaw()

println(heartsSymbol)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值