美文网首页Swift
15.Swift学习之枚举

15.Swift学习之枚举

作者: YungFan | 来源:发表于2018-10-16 21:24 被阅读118次

    枚举介绍

    • 概念介绍
      • 枚举定义了一个通用类型的一组相关的值,可以在代码中以一个安全的方式来使用这些值
      • Swift中的枚举是一等类型, 它可以像类和结构体一样增加属性和方法
      • 在 C/OC 语言中枚举指定相关名称为一组整型值,而Swift 中的枚举更加灵活
        • 不必给每一个枚举成员提供一个值
        • Swift 中的枚举可以提供的值类型有:字符串,字符,整型值,浮点值等
    • 枚举类型的语法
      • 使用enum关键词并且把它们的整个定义放在一对大括号内
    enum SomeEnumeration {
    // enumeration definition goes here
    }
    
    enum Method{
        case Add
        case Sub
        case Mul
        case Div
    }
    let selectMethod = Method.Sub
    switch (selectMethod){
        case Method.Add:
            print("加法")
        case Method.Sub:
            print("减法")
        case Method.Mul:
            print("除法")
        case Method.Div:
            print("乘法")
        default:
            print("都不是")
    }
    

    枚举的定义

    • 定义方式一
      • case关键词表明新的一行成员值将被定义
      • 不像 C 和 Objective-C 一样,Swift 的枚举成员在被创建时不会被赋予一个默认的整数值
      • 下面的例子中,North,South,East和West不是隐式的等于0,1,2和3
    enum CompassPoint {
      case North
      case South
      case East
      case West
    }
    
    • 定义方式二:多个成员值可以出现在同一行上
    enum CompassPoint {
      case North, South, East,West
    }
    

    枚举赋值

    • 枚举类型赋值可以是字符串/字符/整型/浮点型
      • 如果有给枚举类型赋值,则必须在枚举类型后面明确说明具体的类型
    enum CompassPoint : Int {
      case North = 1
      case South = 2
      case East = 3
      case West = 4
    }
    
    enum CompassPoint : Double {
      case North = 1.0
      case South = 2.0
      case East = 3.0
      case West = 4.0
    }
    
    enum CompassPoint : String {
      case North = "North"
      case South = "South"
      case East = "East"
      case West = "West"
    }
    

    枚举类型推断

    • 前面的例子中,在使用枚举的时候,是通过枚举.值的形式来访问的,其实由于Swift的类型推断非常强大,如果枚举类型确定了,在访问值的时候可以用.值的形式来访问
    enum Method {
        case Add  
        case Sub   
        case Mul    
        case Div
        func method(){     
        }
    }
    //已经明确a是一个Method类型 后面访问可以简写
    let a:Method = .Add
    let selectMethod = Method.Sub
    switch (selectMethod){
        case .Add:
            print("加法")
        case .Sub:
            print("减法")
        case .Mul:
            print("除法")
        case .Div:
            print("乘法")
        default:
            print("都不是")
    }
    

    枚举的原始值

    • C/OC中枚举的本质就是整数,所以C/OC中的枚举是有原始值的,默认是从0开始,而Swift中的枚举默认是没有原始值的, 但是可以在定义时告诉系统让枚举有原始值
    • 注意:
      • 原始值区分大小写
      • 通过rawValue可以获取原始值
      • 通过rawValue返回的枚举是一个可选型,因为原始值对应的枚举值不一定存在
      • 如果想指定第一个元素的原始值之后,后面的元素的原始值能够默认+1 , 枚举一定是 Int 类型
    enum Planet:Int {
        case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
    }
    let planet:Planet = .Mars
    //打印4
    print(planet.rawValue)
    //p是一个可选型
    let p = Planet(rawValue: 3)
    if let p = p {
        switch p {
        case .Mercury:
            print("Mercury")
        case .Venus:
            print("Venus")
        case .Earth:
            print("Earth")
        case .Mars:
            print("Mars")
        case .Jupiter:
            print("Jupiter")
        case .Saturn:
            print("Saturn")
        case .Uranus:
            print("Uranus")
        case .Neptune:
            print("Neptune")
        }
    }
    

    相关文章

      网友评论

        本文标题:15.Swift学习之枚举

        本文链接:https://www.haomeiwen.com/subject/dhwkoftx.html