1.枚举类型:

“Swift编程语言中,枚举类型属于值类型,而不是引用类型。”

摘录来自: “大话Swift 4.0”。 iBooks.

2.枚举类型和枚举对象的定义:

  1. enum Enumeration {
  2. case value1
  3. case value2
  4. case value3; case value4, value5
  5. case value6
  6. }

3.指定基本类型和原生值:

  1. /// 将IntEnum指定为Int类型
  2. enum IntEnum: Int {
  3. case zero
  4. case one = , two, three
  5. case six = , seven, eight
  6. }
  7.  
  8. print("one = \(IntEnum.one.rawValue)")
  9.  
  10. var one = IntEnum(rawValue: 0)
    if let o = one {
    printf("one is: \(o)")
    printf("one value is: \(o.rawValue)")
    }

4.枚举关联值:

  1. /// 这里定义了一个枚举MyTestEnum,
  2. /// 它枚举case中含有关联值
  3. enum MyTestEnum {
  4. /// 这里的value1具有一个Void类型的关联值
  5. case value1(Void)
  6.  
  7. /// 这里的value2具有一个Int类型的关联值
  8. case value2(Int)
  9.  
  10. /// 这里的value3具有Float、Int、Void与String
  11. /// 这四个类型的关联值
  12. case value3(Float, Int, Void, String)
  13.  }

/// 这里用的关联值为10
let e2 = MyTestEnum.value2(10)

5.递归枚举:

“如果一个枚举类型中某一枚举case的其中一个关联值的类型为该枚举类型本身,那么我们称之为递归枚举”

摘录来自: “大话Swift 4.0”。 iBooks.

  1. enum MyEnum {
  2.  
  3. /// 这里value1不指示对它插入间接层,
  4. /// 因为其关联值不是该枚举类型本身
  5. case value1(Int)
  6.  
  7. /// 对value2插入间接层,
  8. /// 因为其关联值为该枚举类型本身
  9. indirect case value2(MyEnum)
  10. }
  11.  
  12. /// 这里在IndrectEnum枚举前直接添加indirect关键字,
  13. /// 使得这里面所有的枚举case都插入了间接层。
  14. /// 此时该枚举中的所有枚举case前都不能再放indirect关键字了
  15. indirect enum IndrectEnum {
  16. case value1(Int)
  17. case value2(MyEnum)
  18. }

6.枚举中的属性和方法:

  1. /// 这里定义了一个FoodAndDrink枚举
  2. enum MyEnum {
  3.  
  4. case one(Int)
  5. case two(Int)
  6. case three(Int)
  7.  
  8. /// 在枚举中可以定义初始化器
  9. init() {
  10. // 这里默认将当前枚举对象的值作为one枚举值,
  11. // 其关联值为0
  12. self = .one()
  13. }
  14.  
  15. /// 这里定义了一个实例方法fetchValue,
  16. /// 用于萃取当前枚举值的关联值
  17. func fetchValue() -> (Int, String) {
  18. switch self {
  19. case let .one(value):
  20. return (value, "one")
  21.  
  22. case .two(let value):
  23. return (value, "two")
  24.  
  25. case .three(let value):
  26. return (value, "three")
  27. }
  28. }
  29.  
  30. /// 这里定义了一个类型方法,
  31. /// 根据输入参数的值来返回相应的枚举值
  32. static func makeEnum(with value: Int) -> MyEnum {
  33. switch value {
  34. case ..< :
  35. return .one(value)
  36.  
  37. case ..< :
  38. return .two(value)
  39.  
  40. default:
  41. return .three(value)
  42. }
  43. }
  44.  
  45. /// 这里定义了一个计算式实例属性,
  46. /// 将当前枚举值设置为two枚举值,
  47. /// 并带有指定的关联值
  48. var computedProperty: Int {
  49. set(i) {
  50. self = .two(i)
  51. }
  52.  
  53. get {
  54. return self.fetchValue().
  55. }
  56. }
  57.  
  58. /// 这里定义了一个存储式类型属性
  59. static var storedTypeProperty: Int =
  60.  
  61. /// 这里定义了一个计算式类型属性
  62. static var comutedTypeProperty: Int {
  63. set(i) {
  64. storedTypeProperty = i
  65. }
  66.  
  67. get {
  68. return storedTypeProperty
  69. }
  70. }
  71. }
  72.  
  73. func process[…]

Swift4.0复习枚举的更多相关文章

  1. Swift4.0复习特性、编译标志和检查API的可用性

    1.Swift中的特性: @引出,后面紧跟特性名,圆括号带参数即可. @attribute(args) avaiable: 指明对象,函数,类型的可用性. @available(iOS 10.0, m ...

  2. Swift4.0复习访问控制与作用域

    1.访问等级: open: 可以继承,可以重写. public: “public 访问等级能用于修饰所有文件作用域的函数.对象.协议.枚举.结构体.类以及各种类型中的属性与方法.用 public 所修 ...

  3. Swift4.0复习错误处理

    1.Swift中错误的表示: “在Swift中如果我们要定义一个表示错误的类型非常简单,只需遵循 Error 协议即可.我们通常用枚举或结构体类型来表示错误类型,当然枚举可能用得更多些,因为它能更直观 ...

  4. Swift4.0复习扩展

    1.扩展计算式属性: 2.对方法进行扩展: /// 定义枚举类型Light, /// 它指定了基本类型String enum Light: String { case red = "red& ...

  5. Swift4.0复习类

    1.类的属性: 2.类的方法: 3.类作为引用类型: “Swift新增了一对操作符 === 与 !== 用于判定同一个类的两个对象引用是否指向同一对象实例.” 摘录来自: “大话Swift 4.0”. ...

  6. Swift4.0复习协议

    1.协议的定义: /// 定义一个协议MyProt protocol MyProt {   /// 声明了一个实例方法foo, /// 其类型为:() -> Void func foo()   ...

  7. Swift4.0复习结构体

    1.基本语法: /** 定义了一个结构体 */ struct Structure {   /// 一个常量存储式实例属性, /// 并直接为它初始化 let constProperty =   /// ...

  8. Swift4.0复习基本语法简介

    1.五种类型: 包含五种类型——枚举(enum).结构体(struct).类(class).协议( protocol)以及函数类型(function types). 2.变量对象:var 3.常量对象 ...

  9. Swift4.0复习类型定义、类型投射等操作

    1.类型定义: /// 这里将MyInt定义为Int32类型 typealias MyInt = Int32   /// 这里将MyArrayInt定义为[MyInt]数组类型 typealias M ...

随机推荐

  1. Linux 之 光标消失隐藏术

    下面是 Linux 光标突然不见的解决办法: 直接敲命令行就行 echo -e "\033[?25l"  隐藏光标 echo -e "\033[?25h" 显示 ...

  2. python 类 双下划线解析

    __getattr__用法:说明:这是python里的一个内建函数,当调用的属性或者方法不存在时,该方法会被调用调用不存在的属性调用不存在的方法

  3. LeetCode 364. Nested List Weight Sum II

    原题链接在这里:https://leetcode.com/problems/nested-list-weight-sum-ii/description/ 题目: Given a nested list ...

  4. Tensorflow细节-P196-输入数据处理框架

    要点 1.filename_queue = tf.train.string_input_producer(files, shuffle=False)表示创建一个队列来维护列表 2.min_after_ ...

  5. luoguP3768简单的数学题

    大佬们绕道吧(或跳到错误&启发后下一根横线后) 这道题吧正解是莫比乌斯反演吧,但本人有一种独创玄妙的想法去偏分 这道题是让我们求这个对吧 \((\sum_{i=1}^n\sum_{j=1}^n ...

  6. 数据库应用之--Redis+mysql实现大量数据的读写,以及高并发

    一.开发背景 在项目开发过程中中遇到了以下三个需求: 1. 多个用户同时上传数据: 2. 数据库需要支持同时读写: 3. 1分钟内存储上万条数据: 根据对Mysql的测试情况,遇到以下问题: 1. 最 ...

  7. vue-cli3配置多页面入口

    假如要单独将登陆页面当成一个项目入口文件: 第一步:创建一个登陆页面的文件 在项目public文件夹下创建一个login.html,其实就是将index.html复制一份,将title改一下: 第二步 ...

  8. Android Studio导入google training example gradle失败

    Error:Unable to tunnel through proxy. Proxy returns "HTTP/1.1 400 Bad Request 每次从github的Google ...

  9. SpringCloud:Zipkin链路追踪,并将数据写入mysql

    1.zipkin server 1.1.新建Springboot项目,zinkin 1.2.添加依赖 <dependency> <groupId>io.zipkin.java& ...

  10. ubuntu之路——day8.4 Adam自适应矩估计算法

    基本上讲,Adam就是将day8.2提到的momentum动量梯度下降法和day8.3提到的RMSprop算法相结合的优化算法 首先初始化 SdW = 0 Sdb = 0 VdW = 0 Vdb = ...