美文网首页
Swfit中枚举的总结以及使用

Swfit中枚举的总结以及使用

作者: 朦胧之眼 | 来源:发表于2017-04-19 13:59 被阅读18次

    枚举定义了一组具有相关性的数据,是开发者可以再带吗中以一个安全的方式来使用这些值,以又助于提供代码的可读性。
    在Swift中,枚举可以分成两种:任意类型的枚举和指定类型的枚举,结构如下:

    //任意类型的枚举
    enum EnumTest01{
        
    }
    //指定类型的枚举  在指定类型的枚举中不能是空的
    enum EnumTest02:String{
        
    }
    
    

    任意枚举成员时要注意的问题:
    1、在具有任意枚举类型中,可以将其中的成员定位为不同的类型
    2、在任意的类型中,可以不定义成员,从而形成一个空的枚举类型
    定义指定的枚举成员的注意的问题:
    1、在指定数据类型的枚举类型中,如果原始类型是整型,可以不指定原始值。如果指定的类型非整型,需指定原始值。
    2、在枚举类型指定数据类型后,其中的成员也都为此数据类型,不可以定义其他类型。
    3、在为成员指定原始值时,原始值必须为唯一标识的。
    4、在指定数据类型的枚举类型,必须使用case关键字定义成员。如果没有定义成员的话将会报错。
    指定类型的枚举的定义成员:

    enum Enum_names:String{
        case name_01 = "name_01"
        case name_02 = "name_02"
        case name_03 = "name_03"
        case name_04 = "name_04"
    }
    enum Enum_age:Int{
        case age1
        case age2
        case age3 = 20
        case age4
    }
    

    在这里Enum_names:String中的成员都是必须赋值的,但是在Enum_age:Int有时候是没有必要进行赋值的,如上面的.age1的没有赋值起原始值为0,age2的原始值为1 如果赋值后如:age3的原始值为20 age4的原始值是21 ,总结就是在没有赋值的情况下第一个成员为0,以后递增1如果进行了赋值,从赋值开始后面依次递增1。打印原值的方法如下:

    print(Enum_age.age1.rawValue);
    

    以此进行类推获取其他成员的原始值。
    当然了也可以从原始值获取枚举的成员值,代码如下:

    let ageEnum = Enum_age(rawValue: 20)
    let nameEnum = Enum_names(rawValue: "name_01")
    

    在任意类型的枚举类型中,可以定义任意的成员,这些成员是没有值的,在实例化时可以定义此成员的相关信息,这些信心称为相关值。定义如下面代码:

    enum Barcode{
        case UPCA(Int,Int,Int)
        case QString(String,String,String)
    }
    

    将枚举成员和switch语句进行匹配时,switch语句必须要和每一个枚举成员进行匹配,不可以有遗漏,如果开发者不需要匹配每一个枚举成员,可以提供一个默认的default分之来涵盖所有没有明确匹配的成员。

    如:

    let name:Enum_names = .name_01
    //使用default
    switch name {
        case .name_01:
        //打印原值
        print(name.rawValue);
        break;
    default:
        print("没有找到")
    }
    //不使用default
    let age:Enum_age = .age2
    switch age {
    case .age1:
        print(age.rawValue)
    case .age2:
        print(age.rawValue)
    case .age3:
        print(age.rawValue)
    case .age4:
        print(age.rawValue)
    }
    //相关值的switch的匹配
    let barcodeTemp = Barcode.QString("1", "2", "3")
    switch barcodeTemp {   
    case .QString(let str,let str02,let str03):
        print(str + str02 + str03)
    default:
        print("没有找到")
        
    }
    

    相关文章

      网友评论

          本文标题:Swfit中枚举的总结以及使用

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