zoukankan      html  css  js  c++  java
  • Swift4.0复习枚举

    1.枚举类型:

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

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

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

    enum Enumeration {
        case value1
        case value2
        case value3; case value4, value5
        case value6
    }

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

    /// 将IntEnum指定为Int类型
    enum IntEnum: Int {
        case zero
        case one = 1, two, three
        case six = 6, seven, eight
    }
     
    print("one = (IntEnum.one.rawValue)")

    var one = IntEnum(rawValue: 0)
    if let o = one {
    printf("one is: (o)")
    printf("one value is: (o.rawValue)")
    }

    4.枚举关联值:

    /// 这里定义了一个枚举MyTestEnum,
    /// 它枚举case中含有关联值
    enum MyTestEnum {
        /// 这里的value1具有一个Void类型的关联值
        case value1(Void)
         
        /// 这里的value2具有一个Int类型的关联值
        case value2(Int)
         
        /// 这里的value3具有Float、Int、Void与String
        /// 这四个类型的关联值
        case value3(Float, Int, Void, String)
     }

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

    5.递归枚举:

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

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

    enum MyEnum {
         
        /// 这里value1不指示对它插入间接层,
        /// 因为其关联值不是该枚举类型本身
        case value1(Int)
         
        /// 对value2插入间接层,
        /// 因为其关联值为该枚举类型本身
        indirect case value2(MyEnum)
    }
     
    /// 这里在IndrectEnum枚举前直接添加indirect关键字,
    /// 使得这里面所有的枚举case都插入了间接层。
    /// 此时该枚举中的所有枚举case前都不能再放indirect关键字了
    indirect enum IndrectEnum {
        case value1(Int)
        case value2(MyEnum)
    }

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

    /// 这里定义了一个FoodAndDrink枚举
    enum MyEnum {
         
        case one(Int)
        case two(Int)
        case three(Int)
         
        /// 在枚举中可以定义初始化器
        init() {
            // 这里默认将当前枚举对象的值作为one枚举值,
            // 其关联值为0
            self = .one(0)
        }
         
        /// 这里定义了一个实例方法fetchValue,
        /// 用于萃取当前枚举值的关联值
        func fetchValue() -> (Int, String) {
            switch self {
            case let .one(value):
                return (value, "one")
                 
            case .two(let value):
                return (value, "two")
                 
            case .three(let value):
                return (value, "three")
            }
        }
         
        /// 这里定义了一个类型方法,
        /// 根据输入参数的值来返回相应的枚举值
        static func makeEnum(with value: Int) -> MyEnum {
            switch value {
            case 0 ..< 10:
                return .one(value)
                 
            case 20 ..< 30:
                return .two(value)
                 
            default:
                return .three(value)
            }
        }
         
        /// 这里定义了一个计算式实例属性,
        /// 将当前枚举值设置为two枚举值,
        /// 并带有指定的关联值
        var computedProperty: Int {
            set(i) {
                self = .two(i)
            }
             
            get {
                return self.fetchValue().0
            }
        }
         
        /// 这里定义了一个存储式类型属性
        static var storedTypeProperty: Int = 100
         
        /// 这里定义了一个计算式类型属性
        static var comutedTypeProperty: Int {
            set(i) {
                storedTypeProperty = i
            }
             
            get {
                return storedTypeProperty
            }
        }
    }
     
    func process[…]
  • 相关阅读:
    定时任务时间表达式的规则(自己总结)
    本地vagrant配置虚拟域名的坑
    商派onex本地部署无法进入的问题
    一周一篇文章,立贴为证
    Ecshop安装的坑,建议不要使用!
    MYSQL查询语句优化
    .gitignore文件
    剖析Disruptor:为什么会这么快?(二)神奇的缓存行填充
    Disruptor 为什么这么快?
    一篇文章让你成为 NIO 大师 - MyCAT通信模型
  • 原文地址:https://www.cnblogs.com/pengsi/p/8494080.html
Copyright © 2011-2022 走看看