Swift中枚举的总结以及使用

枚举定义了一组具有相关性的数据,是开发者可以再带吗中以一个安全的方式来使用这些值,以又助于提供代码的可读性。

在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("没有找到")
    
}