Switf—4枚举与结构体

/**

使用 enum 来创建枚举。有如类和其他命名类型,枚举可以有方法。

*/

enum Rank:Int {

   case Ace = 1

   case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten

   case Jack, Queen, King

   func simpleDescrition() -> String {

       switch self {

       case .Ace:

           return "ace"

       case .Jack:

           return "jack"

       case .Queen:

           return "queen"

       case .King:

           return "king"

       default:

           return String(self.toRaw())

        }

    }

}


/*

在如上例子中,原始值的类型是 Int 所以可以只指定第一个原始值。其后的原始值都是按照顺序赋值的。也可以使用字符串或浮点数作为枚举的原始值。

使用 toRaw  fromRaw 函数可以转换原始值和枚举值。

if let convertedRank = Rank.fromRaw(3) {

let threeDescription = convertedRank.simpleDescription()

}

*/

var rank =Rank.Ace

println(rank)

var r1 = rank.simpleDescrition()//ace

var r2 =rank.toRaw()//1

println("\(r1):\(r2)");//ace:1

rank = Rank.Nine

r1 = rank.simpleDescrition()//9

r2 =rank.toRaw();//9

println("\(r1):\(r2)");//9:9

rank = Rank.King

r1 = rank.simpleDescrition()//king

r2 =rank.toRaw();//13

println("\(r1):\(r2)");//king:13


ifvar aa = Rank.fromRaw(3) {

   var bb = aa.toRaw()

   println(bb)//3

}



//枚举的成员值就是实际值,而不是其他方式写的原始值。实际上,有些情况是原始值,就是你不提供的时候。

println("枚举的成员值就是实际值,而不是其他方式写的原始值。实际上,有些情况是原始值,就是你不提供的时候。");

//下面Spades赋值200,后面依次加1,如果Spades不赋值,那么Spades值默认为1,后面依次加1

enum MYSuit:Int {//指定枚举值默认为Int

   case Spades=200, Hearts, Diamonds, Clubs

   func simpleDescription() -> String {

       switch self {

       case MYSuit.Spades:

           return "spades"

       case MYSuit.Hearts:

           return "hearts"

       case MYSuit.Diamonds:

           return "dismonds"

       case MYSuit.Clubs:

           return "clubs"

        }

    }

}

let h = MYSuit.Hearts   //by gashero

println(h.toRaw())//201

let hd = h.simpleDescription()

println(hd)//hearts



enum Suit {//没有指定枚举值的默认类型,所以该枚举不能使用toRawfromRaw函数

   case Spades, Hearts, Diamonds, Clubs

   func simpleDescription() -> String {

       switch self {

       case .Spades:

           return "spades"

       case .Hearts:

           return "hearts"

       case .Diamonds:

           return "dismonds"

       case .Clubs:

           return "clubs"

        }

    }

}

let hearts =Suit.Hearts   //by gashero

let heartsDescription =hearts.simpleDescription()

println(heartsDescription)//hearts



//使用 struct 创建结构体。结构体支持多个与类相同的行为,包括方法和构造器。一大重要的区别是代码之间的传递总是用拷贝(值传递),而类则是传递引用。

struct Card {

   var rank: Rank

   var suit: Suit

   func simpleDescription() -> String {

        return"The \(rank.simpleDescrition())  of\(suit.simpleDescription())"

    }

}

let threeOfSpades =Card(rank: .Three, suit: .Spades)

let threeOfSpadesDescription =threeOfSpades.simpleDescription()

println(threeOfSpadesDescription)//The 3  of spades

/**添加方法到 Card类来创建一桌的纸牌,每个纸牌都有合并的ranksuit(就是个打字员的活二,by gashero)

一个枚举的实例成员可以拥有实例的值。相同枚举成员实例可以有不同的值。你在创建实例时赋值。指定值和原始值的区别:枚举的原始值与其实例相同,你在定义枚举时提供原始值。

例如,假设情况需要从服务器获取太阳升起和降落时间。服务器可以响应相同的信息或一些错误信息。

**/

enum ServerResponse {

   case r(String, String)//??

   case e(String)//??

}


let s = ServerResponse.r("6:00 am","8:09 pm")

let f = ServerResponse.e("Out of cheese.")


switch s {

case let .r(sr, sset):

    let serverResponse ="Sunrise is at \(sr) and sunset is at \(sset)."

    println(serverResponse)//Sunrise is at 6:00 am and sunset is at 8:09 pm.

case let .e(err):

   let serverResponse = "Failure... \(err)"

   println(serverResponse)

}


switch f {

caselet .r(sr, sset):

    let serverResponse ="Sunrise is at \(sr) and sunset is at \(sset)."

   println(serverResponse) 

caselet .e(err):

   let serverResponse = "Failure... \(err)"//Failure... Out of cheese.

   println(serverResponse)

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值