返回

Swift 底层原理探索 2:枚举的奥秘

IOS

枚举的基本用法

枚举的定义类似于结构体,使用 enum 来声明。枚举成员被称为枚举情况(case),每个枚举情况都代表一个可能的值。例如,我们可以定义一个表示一周内七天的枚举:

enum Weekday {
    case sunday
    case monday
    case tuesday
    case wednesday
    case thursday
    case friday
    case saturday
}

要创建一个枚举成员,可以使用枚举类型的名称后跟一个点,然后是枚举情况的名称。例如,要创建一个表示星期一的枚举成员,可以使用以下代码:

let monday = Weekday.monday

枚举成员可以具有关联值,关联值可以是任何类型,包括其他枚举类型。例如,我们可以为 Weekday 枚举添加一个关联值来表示每一天的日期:

enum Weekday {
    case sunday(Int)
    case monday(Int)
    case tuesday(Int)
    case wednesday(Int)
    case thursday(Int)
    case friday(Int)
    case saturday(Int)
}

要创建一个具有关联值的枚举成员,可以使用枚举类型的名称后跟一个点,然后是枚举情况的名称,接着是关联值。例如,要创建一个表示星期一的枚举成员并将其日期设置为 13,可以使用以下代码:

let monday = Weekday.monday(13)

原始值

枚举成员还可以具有原始值,原始值可以是任何类型,但通常是整数或字符串。原始值用于对枚举情况进行编号或命名。例如,我们可以为 Weekday 枚举添加一个原始值来表示每一天的数字:

enum Weekday: Int {
    case sunday = 1
    case monday = 2
    case tuesday = 3
    case wednesday = 4
    case thursday = 5
    case friday = 6
    case saturday = 7
}

要创建一个具有原始值的枚举成员,可以使用枚举类型的名称后跟一个冒号和原始值类型,然后是枚举情况的名称,接着是原始值。例如,要创建一个表示星期一的枚举成员并将其原始值设置为 2,可以使用以下代码:

let monday = Weekday.monday

递归枚举

递归枚举是一种可以包含自身类型的枚举。例如,我们可以定义一个表示数学表达式的枚举,该枚举可以包含数字、变量或其他表达式:

enum Expression {
    case number(Int)
    case variable(String)
    case operation(String, Expression, Expression)
}

要创建一个递归枚举成员,可以使用枚举类型的名称后跟一个点,然后是枚举情况的名称,接着是参数。例如,要创建一个表示数字 10 的枚举成员,可以使用以下代码:

let ten = Expression.number(10)

结语

枚举是 Swift 中强大的类型,可以表示一组相关值。它们提供了类型安全、可读性和灵活性,使代码更易于维护和理解。本文深入探讨了枚举的奥秘,包括基本用法、关联值、原始值、递归枚举等,并提供了示例代码,帮助您更好地掌握枚举的应用。