Swift面向对象-枚举

前端之家收集整理的这篇文章主要介绍了Swift面向对象-枚举前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. //
  2. // main.swift
  3. // Swift面向对象-枚举
  4. //
  5. // Created by Goddog on 15/5/30.
  6. // Copyright (c) 2015年 Goddog. All rights reserved.
  7. //
  8. /*
  9. 1.Swift的枚举不像C那样简单,也不像Java的枚举(其实Java的枚举是一种特殊的类);
  10. 2.Swift的枚举是完全重新定义的一个类型,管理一组有限值的集合;
  11. 3.Swift的枚举具有面向对象的特征,支持计算属性支持实例方法和类方法支持定义构造器来完成初始化;
  12. 4.Swift可通过扩展来增强原有枚举的功能,允许通过指定协议来提供标准的功能
  13.  
  14.  
  15. */
  16.  
  17.  
  18. import Foundation
  19.  
  20.  
  21. /**
  22. * 使用多个个case列出多个实例
  23. */
  24. enum Season
  25. {
  26. case Spring
  27. case Summer
  28. case Fall
  29. case Winter
  30. }
  31.  
  32. /**
  33. * 使用一个case列出多个实例(我喜欢这种写法)
  34. */
  35. enum Weekday
  36. {
  37. case Monday,Tuesday,Wednessday,Thursday,Friday,Saturday,Sunday
  38. }
  39.  
  40. //使用枚举声明变量
  41. var sn : Season
  42. var wd : Weekday
  43.  
  44. //已有的枚举实例赋值
  45. sn = Season.Summer
  46. wd = .Saturday //还可以这样省略哦
  47.  
  48. //枚举值和Switch一起使用
  49. switch(wd)
  50. {
  51. case .Monday:
  52. println("周一,上班")
  53. case .Tuesday:
  54. println("周二")
  55. case .Wednessday:
  56. println("周三")
  57. case .Thursday:
  58. println("周四")
  59. case .Friday:
  60. println("周五")
  61. case .Saturday:
  62. println("周六")
  63. case .Sunday:
  64. println("周日")
  65. }
  66.  
  67. switch(wd)
  68. {
  69. case .Monday:
  70. println("上班咯")
  71. case .Tuesday,.Wednessday,.Thursday: //hi,还可以这样子写,java可没这种写法哦
  72. println("周二、周三、周四")
  73. default:
  74. println("周五呢还是放假咯")
  75. }
  76.  
  77.  
  78. /**
  79. 原始值
  80. 1.枚举要么所有的都指定原始值、要么完全不指定原始值;
  81. 2.原始值可以自动判断,也可以显示指定;
  82. */
  83.  
  84. //定义枚举,并制定该枚举原始值的类型为Int
  85. enum Numbers : Int
  86. {
  87. //用case列出六个枚举实例
  88. case one,two = 2,four = 4,five,six,seven //系统自动判断
  89. //这个地方程序会自动推断one=1,five=5,seven=7 特别神奇
  90. }
  91.  
  92. //如果非Int类型,比如事String、Character
  93. enum Human : Character
  94. {
  95. case Man = "M" //Human都是显示指定
  96. case Woman = "W"
  97. }
  98.  
  99. var num = Numbers.five
  100. //获取枚举的原始值
  101. println("five的原始值是\(num.rawValue)")
  102.  
  103. //根据原始值获取枚举值
  104. var myHuman = Human(rawValue: "W")
  105. if myHuman != nil
  106. {
  107. switch(myHuman!) //注意:使用!进行强制解析
  108. {
  109. case .Man:
  110. println("男人")
  111. case .Woman:
  112. println("女人")
  113. }
  114. }
  115.  
  116. /**
  117. 关联值
  118. 1.关联值可以称为“属性值”或"成员值",各个实例的内部状态:比如上面的男人有哪些特质(胡子,.....)
  119.  
  120. */
  121. //定义枚举
  122. enum Planet
  123. {
  124. //不同的枚举可以携带数量不等、类型不等的关联值
  125. case Mercury(weight:Double,density:Double,name:String) //还指定了名称
  126. case Earth(Double,String)
  127. case Saturn
  128. }
  129.  
  130. var mercury = Planet.Mercury(weight: 0.05,density: 5.43,name: "水星")
  131. var venus = Planet.Earth(1.0,"地球")
  132. var saturn = Planet.Saturn
  133. //如果程序要访问枚举的关联值,那就需要声明额外的变量和常量,并将枚举值的关联值绑定到这些变量和常量。
  134. switch(venus)
  135. {
  136. case Planet.Earth(var weight,var name):
  137. println("该行星的名字为:\(name),质量是\(weight)")
  138. default:
  139. break
  140. }
  141. //如果打算将某个枚举值的所有关联值都提取为变量和常量,也可以将一个var或let放置在枚举成员之前即可
  142. switch(mercury)
  143. {
  144. //将Planet.Earth的关联值绑定到weight、density常量
  145. case let .Earth(weight,density):
  146. println("该行星的质量相当于:\(weight)个地球,密度为\(density)")
  147. //将Planet.Mercury的关联值绑定到w、d、n常量
  148. case let .Mercury(weight:w,density:d,name:n):
  149. println("该行星的质量\(w),密度\(d),名字\(n)")
  150. default:
  151. break
  152. }
  153.  
  154.  
  155. println("Hello,World!")
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  

猜你在找的Swift相关文章