枚举

/*

/*

//: Playground – noun: a place where people can play

1).枚举的定义及采纳

 Swift枚举:

 Swift枚举:

importUIKit

 定义语法:

 Swift中的枚举比OC中的枚举强大, 因为Swift中的枚举是一等类型,
它能够像类和结构体同样扩大属性和艺术

 Swift中的枚举比OC中的枚举壮大, 因为斯维夫特中的枚举是一等类型,
它能够像类和结构体一样扩展属性和章程

/*

枚举类型  枚举名 : 枚举值类型 {

     case 类型名1   

     case 类型名2

     …

}   //枚举值类型可省略 私下认可Int

 格式:

 格式:

Swift枚举:

如:

 enum Method{

 enum Method{

Swift中的枚举比OC中的枚举庞大,因为Swift中的枚举是一等类型,它能够像类和结构体同样扩大品质和措施

enum Method {

      case add

      case sub

      case Mul

      case Dlv

}

 case 枚举值

 case 枚举值

格式:

调用:(可整合斯威夫特的门类预计机制

 }

 }

enum Method{

let case1 = Method.add

let case2 : Method = .sub

 */

 */

case枚举值

组成switch case使用枚举:

 

 

}

func chooseMethod(method : Method) {

     switch method {

        case .add: break

         default : break

    }

}

enum Method {

enum Method {

*/


    case Add

    case Add

enumMethod{

二).枚举关联值和值绑定

    case Sub

    case Sub

//case Add

enum Method {

    case add (start : Double , end : Double)

    case sub (start : Double , end : Double)

}

let case1 = Method.add(start: 11, end: 10)

func chooseMethod(method : Method) {

    switch method {

        case let .add(start: e, end: _) :

             print(e)

       default : break

   }

}

    case Mul

    case Mul

//case Sub

    case Div

    case Div

//case Mul

    //能够连在一同写

    //能够连在一齐写

//case Div

//    case Add, Sub, Mul, Div

//    case Add, Sub, Mul, Div

//可以连在一同写

}

}

caseAdd, Sub, Mul, Div

 

 

}

// 能够运用枚举类型变量也许常量接收枚举值

// 能够选用枚举类型变量或然常量接收枚举值

//能够采取枚举类型变量或常量接收枚举值

var m:Method = .Add

var m:Method = .Add

varm:Method= .Add

print(m)

print(m)

//注意:要是变量或常量没有点名项目,那么前面必须抬高该值属于哪个枚举类型

 

 

varm1 =Method.Add

// 注意: 要是变量只怕常量未有点名项目,
那么后边必须抬高该值属于哪个枚举类型

// 注意: 要是变量大概常量未有点名项目,
那么前边必须抬高该值属于哪个枚举类型

枚举。//利用Switch匹配

var m1 = Method.Add

var m1 = Method.Add

//注意:若是case中含有了独具的值,能够不写default.假设case中平素不包涵枚举中存有的值,必须写default

print(m1)

print(m1)

funcmakeChoiceMethod(op:Method)->(Double,Double)->Double{

 

 

switch(op){

// 利用Switch匹配

// 利用Switch匹配

case.Add:

// 注意: 假如case中含有了富有的值, 能够不写default;
假若case未有包蕴枚举中具备的值, 必须写default

// 注意: 如若case中含有了具备的值, 能够不写default;
若是case没有包括枚举中具有的值, 必须写default

print(“加法”)

 

 

funcadd(a:Double,b:Double)->Double{

switch (Method.Add){

switch (Method.Add){

returna+b

case Method.Add:

case Method.Add:

}

    print(“加法”)

    print(“加法”)

returnadd

case Method.Sub:

case Method.Sub:

case.Sub:

    print(“减法”)

    print(“减法”)

print(“减法”)

case Method.Mul:

case Method.Mul:

return{(a:Double,b:Double)->Doubleinreturna-b}

    print(“除法”)

    print(“除法”)

case.Mul:

case Method.Div:

case Method.Div:

print(“除法”)

    print(“乘法”)

    print(“乘法”)

return{return$0 * $一}//利用项目预计,使用$符号,省略写成$0 * $1

//default:

//default:

case.Div:

//    print(“都不是”)

//    print(“都不是”)

print(“乘法”)

}

}

return{ $0 / $1 }

 

 

//default:

/*

/*

//print(“都不是”)

 原始值:

 原始值:

}

 OC中枚举的本质就是整数,所以OC中的枚举是有原始值的,暗中同意是从0初步

 OC中枚举的真面目正是整数,所以OC中的枚举是有原始值的,暗中认可是从0初始

}

 而Swift中的枚举暗许是未曾原始值的,
可是足以在概念时报告系统让枚举有原始值

 而Swift中的枚举暗中认可是绝非原始值的,
可是足以在概念时报告系统让枚举有原始值

makeChoiceMethod(op: .Add)(5,4)

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

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

makeChoiceMethod(op: .Mul)

 case 枚举值

 case 枚举值

/*

 }

 }

原始值:

 */

 */

OC中枚举的本来面目正是整数,所以OC中的枚举是有原始值的,私下认可是从0开始

 

 

而斯维夫特中的枚举私下认可是尚未原始值的,可是足以在概念时告知系统让枚举有原始值

enum Method2: Int {

enum Method2: Int {

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

    case Add, Sub, Mul, Div

    case Add, Sub, Mul, Div

case枚举值

}

}

}

 

 

*/

// 和OC中的枚举一样, 也可以钦命原始值, 前面包车型地铁值暗许 +一

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

//和OC中的枚举同样,也足以钦命原始值,后边的值私下认可+一

enum Method3: Int {

enum Method3: Int {

enumMethod3:Int{

    case Add = 5, Sub, Mul, Div

    case Add = 5, Sub, Mul, Div

caseAdd =5, Sub, Mul, Div

}

}

}

 

 

Method3.Add.rawValue

// 斯威夫特中的枚举除了可以钦命整型以外还足以内定其余项目,
可是1旦钦命别的品种, 必须给具有枚举值赋值, 因为不能够自动递增

// Swift中的枚举除了能够内定整型以外还是能钦定其余项目,
不过若是钦定其余品种, 必须给持有枚举值赋值, 因为不可能自动递增

Method3.Sub.rawValue

enum Method4: Double {

enum Method4: Double {

Method3.init(rawValue:6)

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

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

//
斯威夫特中的枚举除了能够钦定整形以外还足以内定别的门类,不过壹旦钦命别的项目,必须给持有枚举值赋值,因为不能够自动递增

}

}

enumMethod4:Double{

 

 

//能够连在一同写

// rawValue代表将枚举值转换为原始值,
注意老版本中退换为原始值的不二等秘书技名为toRaw

// rawValue代表将枚举值转换为原始值,
注意老版本中退换为原始值的章程名称为toRaw

caseAdd =5.0, Sub =6.0, Mul =6.1, Div =8.0

//
最新的斯威夫特版本不再扶助toRaw和fromRaw了,唯有rawValue属性和hashValue属性了!

//
最新的斯维夫特版本不再帮衬toRaw和fromRaw了,唯有rawValue属性和hashValue属性了!

}

print(Method4.Sub.rawValue)

print(Method4.Sub.rawValue)

//
rawValue代表将枚举值转变为原始值,注意老版本中改变为原始值的办法名称为toRaw

 

 

print(Method4.Sub.rawValue)

//
hashValue来访问成员值所对应的哈希值,那一个哈希值是无法改动的,由编写翻译器自动生成,之后不可改换,Swift在处之泰然其实采纳哈希值来识别枚举符号的(即成员)

//
hashValue来访问成员值所对应的哈希值,这么些哈希值是不可能改造的,由编写翻译器自动生成,之后不可改动,斯威夫特在鬼鬼祟祟其实利用哈希值来识别枚举符号的(即成员)

//原始值调换为枚举值

print(Method4.Mul.hashValue)

print(Method4.Mul.hashValue)

enumMethod5:String{

 

 

caseAdd =”add”, Sub =”sub”, Mul =”mul”, Div =”div”

// 原始值转变为枚举值

// 原始值转变为枚举值

}

enum Method5: String {

enum Method5: String {

//通过原始值创造枚举值

    case Add = “add”, Sub = “sub”, Mul = “mul”, Div = “div”

    case Add = “add”, Sub = “sub”, Mul = “mul”, Div = “div”

/*

}

}

注意:

 

 

一.原始值区分轻重缓急写

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

// 通过原始值创制枚举值

2.重回的是3个可选值,因为原始值对应的枚举值不必然存在

/*

/*

叁.老本子中为fromRaw(“add”)

 注意:

 注意:

*/

 壹.原始值区分轻重缓急写

 1.原始值区分轻重缓急写

letm2 =Method5(rawValue:”add”)

 2.赶回的是贰个可选值,因为原始值对应的枚举值不自然存在

 二.再次回到的是多个可选值,因为原始值对应的枚举值不肯定期存款在

print(“\(String(describing:m2))”)

 三.老版本中为fromRaw(“add”)

 叁.老版本中为fromRaw(“add”)

//func chooseMethod(op:Method2)

 */

 */

funcchooseMethod(op:String)

let m2:Method5 = Method5(rawValue: “add”)!

let m2:Method5 = Method5(rawValue: “add”)!

{

print(m2)

print(m2)

//由于重临是可选类型,所以有十分大希望为nil,最棒使用可选绑定

 

 

ifletopE =Method5(rawValue: op){

//func chooseMethod(op:Method2)

//func chooseMethod(op:Method2)

switch(opE){

 

 

case.Add:

func chooseMethod5(rawString: String) {

func chooseMethod5(rawString: String) {

print(“加法”)

    // 由于重临值是可选类型, 所以有望为nil, 最佳应用可选绑定

    // 由于重回值是可选类型, 所以有希望为nil, 最好利用可选绑定

case.Sub:

    if let opE = Method5(rawValue: rawString) {

    if let opE = Method5(rawValue: rawString) {

print(“减法”)

        switch (opE) {

        switch (opE) {

case.Mul:

        case .Add:

        case .Add:

print(“除法”)

            print(“加法”)

            print(“加法”)

case.Div:

        case .Sub:

        case .Sub:

print(“乘法”)

            print(“减法”)

            print(“减法”)

}

        case .Mul:

        case .Mul:

}

            print(“除法”)

            print(“除法”)

}

        case .Div:

        case .Div:

chooseMethod(op:”div”)

            print(“乘法”)

            print(“乘法”)

/*

        }

        }

枚举相关值:

    }

    }

能够让枚举值对应的原始值不是唯一的,而是二个变量.

}

}

每七个枚举能够是在某种模式下的有个别特定值

print(chooseMethod5(rawString: “add”))

print(chooseMethod5(rawString: “add”))

*/

 

 

enumlineSegmentDescriptor{

澳门葡京备用网址,/*

/*

caseStartAndEndPattern(start:Double, end:Double)

 枚举相关值:

 枚举相关值:

caseStartAndLengthPattern(start:Double, length:Double)

 能够让枚举值对应的原始值不是绝无仅有的, 而是叁个变量.

 能够让枚举值对应的原始值不是绝无仅有的, 而是多少个变量.

}

 每2个枚举能够是在某种情势下的一部分特定值

 每七个枚举能够是在某种形式下的部分特定值

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

 */

 */

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

 

 

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

enum lineSegmentDescriptor {

enum lineSegmentDescriptor {

/*

    case StartAndEndPattern(start: Double, end: Double)

    case StartAndEndPattern(start: Double, end: Double)

switch lsd

    case StartAndLengthPattern(start: Double, length: Double)

    case StartAndLengthPattern(start: Double, length: Double)

{

}

}

case .StartAndEndPattern(let s, let e):

 

 

print(“start = \(s) end = \(e)”)

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

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

case .StartAndLengthPattern(let s, let l):

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

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

print(“start = \(s) lenght = \(l)”)

print(lsd)

print(lsd)

}

 

 

*/

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

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

//提取关联值优化写法

/*

/*

switchlsd

 switch lsd

 switch lsd

{

 {

 {

caselet.StartAndEndPattern(s, e):

 case .StartAndEndPattern(let s, let e):

 case .StartAndEndPattern(let s, let e):

print(“start =\(s) end =\(e)”)

 print(“start = \(s) end = \(e)”)

 print(“start = \(s) end = \(e)”)

case.StartAndLengthPattern(lets,letl):

 case .StartAndLengthPattern(let s, let l):

 case .StartAndLengthPattern(let s, let l):

print(“start =\(s) lenght =\(l)”)

 print(“start = \(s) lenght = \(l)”)

 print(“start = \(s) lenght = \(l)”)

}

 }

 }

 */

 */

 

 

// 提取关联值优化写法

// 提取关联值优化写法

switch lsd

switch lsd

{

{

case let .StartAndEndPattern(s, e):

case let .StartAndEndPattern(s, e):

    print(“start = \(s) end = \(e)”)

    print(“start = \(s) end = \(e)”)

case .StartAndLengthPattern(let s, let l):

case .StartAndLengthPattern(let s, let l):

    print(“start = \(s) l = \(l)”)

    print(“start = \(s) l = \(l)”)

}

}

 

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website