美文网首页
Swift 枚举

Swift 枚举

作者: 岁变 | 来源:发表于2018-01-22 15:09 被阅读21次

      枚举,编程语言中比较常见的用法,都有枚举的实现.下面就记录一下swift中的枚举具有什么新的灵活性.
      Swift中的枚举支持关联值和设置原始值,这些是的枚举的使用更加的灵活.

    语法

    enum Direction {
        case front
        case behind
        case left
        case right
    }
    //这是在swift中枚举的定义语法,可以看到,每一行的枚举项前都要用"case"关键字来标识
    //也可以用一个"case"来标识,将所有枚举项写在一行,用","隔开
    enum DirectionOneLine {
        case front, behind, left, right
    }
    
    • 注意在OC中枚举项可以用0,1,2这样的数字代替,但在Swift中是不可以的.

    使用

    • 用switch进行匹配
    var goWhere: Direction = .left
    
    switch goWhere {
    case .front:
        print("前")
    case .behind:
        print("后")
    case .left:
        print("左")
    case .right:
        print("右")
    }
    

    关联值(Associated Values)

    • Swift的枚举中,支持给每一个枚举项附加信息,来扩充枚举项的信息表示,这样的可附加信息就叫做关联值,这样枚举的使用就灵活许多.
      比如上面的例子 Direction 表示移动方向的枚举,枚举项是前后左右四个方向,现在想在知道移动方向的同时也知道移动的距离,这样就可以关联值,直接对枚举项进行信息附加,写法如下:
    enum DirectionAssociatedValue {
        case front(Int)
        case behind(Int)
        case left(Int)
        case right(Int)
    }
    //可以看到增加关联值,直接在枚举项的后面添加"()",然后将增加信息的关联值得类型写在()中,多个用","隔开
    
    //使用
    var goWhere: DirectionAssociatedValue = .front(20)
    switch goWhere {
    case .front(let distance):
        print(distance)
    case .behind:
        print("后")
    case .left:
        print("左")
    case .right:
        print("右")
    }
    //使用时可以看到赋值枚举变量时,直接在()中添加相应附加信息,
    //Switch中case 枚举项的()中,可以声明变量或者常量,用来接收附加的信息,这样就可以使用这些附加信息
    
    • 这样的枚举关联值,是不是觉得用起来特别方便呢.

    原始值(Raw Values)

    • 除了关联值外,Swift中的枚举还支持原始值的实现,它是给每一个枚举项一个默认值,这个默认值不是关联值那样实例化时才确定,而是在编译时就已经确定下来,写法如下:
    enum DirectionRawValue: String {
        case front = "前"
        case behind = "后"
        case left = "左"
        case right = "右"
    }
    //这里看到在定义枚举的第一行后面,添加了一个String类型的关键字,这就代表着该枚举的原始值类型是String型的.
    
    //使用
    //直接输出原始值
    print(DirectionRawValue.front.rawValue)
    
    //还可以通过原始值来初始化枚举对象
    let dirction = DirectionRawValue.init(rawValue: "前")
    //注意:这个方法的返回值是一个Optionals,关于Optionals也是Swift增加的东西,意思就是,这个方法可能有值返回,也可能无值返回,当没有值返回时就为nil,所以这里就需要进行一些去nil的处理
    if let dirctionTest = DirectionRawValue.init(rawValue: "2") {
        print(dirctionTest)
    } else {
        print("初始化失败")
    }
    

      OK,Swift枚举就记录到这里,相信了解OC之后又来学习Swift的小伙伴们应该都会觉得Swift要比OC更棒,光是这枚举,就比OC中的灵活好多,所以呼吁小伙伴们赶紧把Swift学到手.没准哪天你的项目经理就会站在你面前让你把老的OC项目,改成Swift的呢.哈哈.

    相关文章

      网友评论

          本文标题:Swift 枚举

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