swift入门

Swift概览5

                      根据苹果官方《The Swift Programming Language》

2.6 枚举和结构体

       使用 enum 创建枚举。像类和其他已命名类型,枚举也有与之关联的方法。本文注:下面 switch 后面的变量是 self,所以后面的 case 条件 前面有. 。表示Rank中的。

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. enum Rank: Int {  
  2.     case Ace = 1  
  3.     case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten  
  4.     case Jack, Queen, King  
  5.     func simpleDescription() -> String {  
  6.         switch self {  
  7.         case .Ace:              //表示是self.Ace 也就是Rank中的Ace  
  8.             return "ace"  
  9.         case .Jack:  
  10.             return "jack"  
  11.         case .Queen:  
  12.             return "queen"  
  13.         case .King:  
  14.             return "king"  
  15.         default:  
  16.             return String(self.toRaw())  
  17.         }  
  18.     }  
  19. }  
  20. let ace = Rank.Ace  
  21. let aceRawValue = ace.toRaw()  
       在上面的例子中,枚举的原始值类型是 Int 类型,所以你只需指定第一个原始值。剩下原始值会以次序分配(逐个加1)。你也可以使用字符串或者浮点型数字作为枚举的原始类型。

       使用 toRaw 和 fromRaw 函数进行原始值和枚举值之间的转换。

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. if let convertedRank = Rank.fromRaw(3) {  
  2.     let threeDescription = convertedRank.simpleDescription()  
  3. }  
       枚举成员值是实际的值,不仅仅只是原始值的另外一种写法。事实上,在没有有意义的原始值的情况下,你不用提供一个有意义的。

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. enum Suit {  
  2.     case Spades, Hearts, Diamonds, Clubs  
  3.     func simpleDescription() -> String {  
  4.         switch self {  
  5.         case .Spades:  
  6.             return "spades"  
  7.         case .Hearts:  
  8.             return "hearts"  
  9.         case .Diamonds:  
  10.             return "diamonds"  
  11.         case .Clubs:  
  12.             return "clubs"  
  13.         }  
  14.     }  
  15. }  
  16. let hearts = Suit.Hearts  
  17. let heartsDescription = hearts.simpleDescription()  
       注意上面提及枚举成员 Hearts 的两种方式:当给 Hearts 常量(倒数第二行的)分配值的时候, 使用的是枚举成员 Hearts 的全名 Suit.Hearts,这是因为这个常量没有详细的类型说明。在switch中,枚举以缩写的格式 .Hearts 被引用,这是因为 self 的值已知为 Suit。你可以在值的类型已知的情况下任意使用缩写格式。

       使用 struct 创建一个结构体。结构体支持许多类的特性,像方法和初始化。结构体和类的一个重要区别就是,在代码中传来传去的时候,结构体是被复制,类是通过引用传递。

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. struct Card {  
  2.     var rank: Rank  
  3.     var suit: Suit  
  4.     func simpleDescription() -> String {  
  5.         return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"  
  6.     }  
  7. }  
  8. let threeOfSpades = Card(rank: .Three, suit: .Spades)  
  9. let threeOfSpadesDescription = threeOfSpades.simpleDescription()  
       枚举成员的实例可以有值于之关联。同一个枚举成员的那些实例可以有不同的值于之关联。在创建实例时提供关联的值。关联的值和原始值时不同的:一个枚举的成员的原始值对它的全部实例来说都是一样的,在你定义枚举的时候你需提供那个原始值。

       例如,考虑从服务器上请求日出和日落时间的情况。服务器可以回应所需信息,也可以回应一些错误的信息。

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. enum ServerResponse {  
  2.     case Result(String, String)  
  3.     case Error(String)  
  4. }  
  5.    
  6. let success = ServerResponse.Result("6:00 am", "8:09 pm")  
  7. let failure = ServerResponse.Error("Out of cheese.")  
  8.    
  9. switch success {  
  10. case let .Result(sunrise, sunset):  
  11.     let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."  
  12. case let .Error(error):  
  13.     let serverResponse = "Failure...  \(error)"  
  14. }  
       注意如何从 ServerResponse 提取 日出和日落 时间作为匹配 switch 的case中的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值