美文网首页
swift3.0- 枚举

swift3.0- 枚举

作者: 07212a79db66 | 来源:发表于2016-08-11 16:12 被阅读88次

Swift枚举

  • Swift中的枚举比OC中的枚举强大, 因为Swift中的枚举是一等类型, 它可以像类和结构体一样增加属性和方法
  • 格式:
enum Method{
    case 枚举值
}

enum HomeTableViewCellIdentifier:String {
    case NormalCell = "NormalCell"
    case ForwardCell = "ForwardCell"
    
    static func cellID(status:Status) -> String {
        return status.retweeted_status != nil ? ForwardCell.rawValue : NormalCell.rawValue
        
    }
}



enum Method{
//    case Add
//    case Sub
//    case Mul
//    case Div
    // 可以连在一起写
    case Add, Sub, Mul, Div
}

// 可以使用枚举类型变量或常量接收枚举值
var m: Method = .Add
// 注意: 如果变量或常量没有指定类型, 那么前面必须加上该值属于哪个枚举类型
var m1 = Method.Add


利用Switch匹配

  • 注意:如果case中包含了所有的值, 可以不写default. 如果case中没有包含枚举中所有的值, 必须写default
   switch (Menthod.Add) {
        case .Add:
            print("加法")
        case .Sub:
            print("减法")
        case .Mul:
            print("除法")
        case .Div:
            print("乘法")
    }

原始值

  • OC中枚举的本质就是整数,所以OC中的枚举是有原始值的,默认是从0开始
    而Swift中的枚举默认是没有原始值的, 但是可以在定义时告诉系统让枚举有原始值
enum Method: 枚举值原始值类型{
    case 枚举值
}
enum Method2: Int{
    // 可以连在一起写
    case Add, Sub, Mul, Div
}

// 和OC中的枚举一样, 也可以指定原始值, 后面的值默认+1
enum Method3: Int{
    case Add = 5, Sub, Mul, Div
}
  • Swift中的枚举除了可以指定整形以外还可以指定其它类型, 但是如果指定其它类型, 必须给所有枚举值赋值, 因为不能自动递增
enum Method4: Double{
    // 可以连在一起写
    case Add = 5.0, Sub = 6.0, Mul = 6.1, Div = 8.0
}

// rawValue代表将枚举值转换为原始值   
     print(Method4.Sub.rawValue)
 
 // 原始值转换为枚举值
enum Method5: String{
    case Add = "add", Sub = "sub", Mul = "mul", Div = "div"
}

 // 通过原始值创建枚举值
 //原始值区分大小写
 //返回的是一个可选值,因为原始值对应的枚举值不一定存在
 let m2 = Method5(rawValue: "add")
 print(m2)
       
        

枚举相关值

  • 可以让枚举值对应的原始值不是唯一的, 而是一个变量.
    每一个枚举可以是在某种模式下的一些特定值
enum lineSegmentDescriptor{
    case StartAndEndPattern(start:Double, end:Double)
    case StartAndLengthPattern(start: Double, length:Double)
}

  • 如果在函数内部这样用
 override func viewDidLoad() {
        super.viewDidLoad()
        
       var lsd = lineSegmentDescriptor.StartAndLengthPattern(start: 0.0, length: 100.0)
        switch lsd
        {
        case let .StartAndEndPattern(s, e):
            print("start = \(s) end = \(e)")
        case .StartAndLengthPattern(let s, let l):
            print("start = \(s) lenght = \(l)")
        }
    }

会有一个警告:Switch condition evaluates to a constant,此时需要把变量写到函数外边,或者传入到函数里面即可

  var lsd = lineSegmentDescriptor.StartAndLengthPattern(start: 0.0, length: 100.0)
    override func viewDidLoad() {
        super.viewDidLoad()

        switch lsd
        {
        case let .StartAndEndPattern(s, e):
            print("start = \(s) end = \(e)")
        case .StartAndLengthPattern(let s, let l):
            print("start = \(s) lenght = \(l)")
        }
    }
    

相关文章

  • Swift3.0-枚举

    枚举 在 C 语言中,枚举会为一组整型值分配相关联的名称。Swift 中的枚举更加灵活,不必给每一个枚举成员提供一...

  • swift3.0- 枚举

    Swift枚举 Swift中的枚举比OC中的枚举强大, 因为Swift中的枚举是一等类型, 它可以像类和结构体一样...

  • Swift3.0- 类型转换、Any、AnyObject(可选链

    Swift3.0- 类型转换、Any、AnyObject(可选链)

  • Swift3.0-枚举和结构体

    用enum 来创建一个枚举。像类和其他的命名类型一样,枚举也可以有方法。 默认情况下,Swift 赋值给枚举的原始...

  • swift3.0-继承、构造、类扩展

    Swift3.0-继承、构造、类扩展继承(inherit) 单向关系1、定义:某个类通过继承语法而获取另一个类...

  • C#枚举及与枚举常数的转换

    1、枚举的定义 2、枚举绑定到comboBox 3、枚举常数转换为枚举string转枚举 数字值转枚举

  • Swift 基础笔记 - 枚举

    枚举 OC定义和使用枚举 Swift定义枚举类型 Swift判断枚举类型 枚举成员类型

  • 枚举类

    1.枚举类型的定义: 枚举类型定义的一般形式为 enum 枚举名{//枚举值表枚举值1;枚举值2;...} 在枚举...

  • 10、枚举与闭包

    枚举 枚举和普通类相比有什么优势 枚举类型、枚举名称与枚举值 枚举的比较运算 两个枚举之间可以使用等值比较(==)...

  • Swift与OC的语法简单对比(常用语法二)

    20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...

网友评论

      本文标题:swift3.0- 枚举

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