澳门至尊网站-首页

您的位置:澳门至尊网站 > 程序编程 > 枚举

枚举

2019-11-14 17:25

/*

 Swift枚举:

 斯威夫特中的枚举比OC中的枚举强盛, 因为斯维夫特中的枚举是一等类型, 它能够像类和结构体相通扩充品质和措施

 格式:

 enum Method{

 case 枚举值

 }

 */

 

enum Method {

    case Add

    case Sub

    case Mul

    case Div

    //能够连在一齐写

//    case Add, Sub, Mul, Div

}

 

// 能够动用枚举类型变量恐怕常量选用枚举值

var m:Method = .Add

print(m)

 

// 注意: 要是变量或许常量未有一些名项目, 那么前边必得抬高该值归于哪个枚举类型

var m1 = Method.Add

print(m1)

 

// 利用Switch匹配

// 注意: 假若case中富含了具备的值, 能够不写default; 纵然case未有包括枚举中颇负的值, 必得写default

 

switch (Method.Add){

case Method.Add:

    print("加法")

case Method.Sub:

    print("减法")

case Method.Mul:

    print("除法")

case Method.Div:

    print("乘法")

//default:

//    print("都不是")

}

 

/*

 原始值:

 OC中枚举的精气神就是整数,所以OC中的枚举是有原始值的,暗中认可是从0起初

 而斯威夫特中的枚举暗许是不曾原始值的, 可是可以在概念时告知系统让枚举有原始值

 enum Method: 枚举值原始值类型{

澳门至尊网站, case 枚举值

 }

 */

 

enum Method2: Int {

    case Add, Sub, Mul, Div

}

 

// 和OC中的枚举同样, 也得以钦命原始值, 前面包车型大巴值暗中同意 +1

enum Method3: Int {

    case Add = 5, Sub, Mul, Div

}

 

// 斯维夫特中的枚举除了能够钦赐整型以外还足以钦定别的门类, 不过生龙活虎旦内定其余项目, 必得给全部枚举值赋值, 因为不可能自动依次增加

enum Method4: Double {

    case Add = 5.0, Sub = 6.0, Mul = 7.0, Div = 8.0

}

 

// rawValue代表将枚举值调换为原始值, 注意老版本中更动为原始值的不二秘技名称为toRaw

// 最新的Swift版本不再帮助toRaw和fromRaw了,独有rawValue属性和hashValue属性了!

print(Method4.Sub.rawValue)

 

// hashValue来访谈成员值所对应的哈希值,这几个哈希值是不可能改善的,由编写翻译器自动生成,之后不可更换,Swift在甘之若素实际上接受哈希值来识别枚举符号的(即成员卡塔尔国

print(Method4.Mul.hashValue)

 

// 原始值调换为枚举值

enum Method5: String {

    case Add = "add", Sub = "sub", Mul = "mul", Div = "div"

}

 

// 通过原始值成立枚举值

/*

 注意:

 1.原始值区分朗朗上口写

 2.再次回到的是三个可选值,因为原始值对应的枚举值不自然存在

 3.老版本中为fromRaw("add")

 */

let m2:Method5 = Method5(rawValue: "add")!

print(m2)

 

//func chooseMethod(op:Method2)

 

func chooseMethod5(rawString: String) {

    // 由于再次来到值是可选类型, 所以有望为nil, 最佳应用可选绑定

    if let opE = Method5(rawValue: rawString) {

        switch (opE) {

        case .Add:

            print("加法")

        case .Sub:

            print("减法")

        case .Mul:

            print("除法")

        case .Div:

            print("乘法")

        }

    }

}

print(chooseMethod5(rawString: "add"))

 

/*

 枚举相关值:

 能够让枚举值对应的原始值不是并世无两的, 而是一个变量.

 每两个枚举能够是在某种情势下的有个别特定值

 */

 

enum lineSegmentDescriptor {

    case StartAndEndPattern(start: Double, end: Double)

    case StartAndLengthPattern(start: Double, length: Double)

}

 

var lsd = lineSegmentDescriptor.StartAndLengthPattern(start: 0.0, length: 100.0)

lsd = lineSegmentDescriptor.StartAndEndPattern(start: 0.0, end: 50.0)

print(lsd)

 

// 利用switch提取枚举关联值

/*

 switch lsd

 {

 case .StartAndEndPattern(let s, let e):

 print("start = (s) end = (e)")

 case .StartAndLengthPattern(let s, let l):

 print("start = (s) lenght = (l)")

 }

 */

 

// 提取关联值优化写法

switch lsd

{

case let .StartAndEndPattern(s, e):

    print("start = (s) end = (e)")

case .StartAndLengthPattern(let s, let l):

    print("start = (s) l = (l)")

}

 

本文由澳门至尊网站发布于程序编程,转载请注明出处:枚举

关键词:

  • 上一篇:没有了
  • 下一篇:没有了