11.5 类型嵌套
Swift语言中的类、结构体和枚举可以进行嵌套,即在某一类型的{}内部定义类。这种类型嵌套在Java中称为内部类,在C#中称为嵌套类,它们的形式和设计目的都是类似的。
类型嵌套的优点是能够访问它外部的成员(包括方法、属性和其他的嵌套类型),嵌套还可以有多个层次。
下面我们看一个示例:
class Employee { ①var no : Int = 0var name : String = ""var job : String = ""var salary : Double = 0var dept : Department = Department()var day : WeekDays = WeekDays.Fridaystruct Department { ②var no : Int = 10var name : String = "SALES"}enum WeekDays { ③case Mondaycase Tuesdaycase Wednesdaycase Thursdaycase Fridaystruct Day { ④static var message : String = "Today is..."}}}var emp = Employee() ⑤println(emp.dept.name) ⑥println(emp.day) ⑦let friday = Employee.WeekDays.Friday ⑧if emp.day == friday {println("相等")}println(Employee.WeekDays.Day.message) ⑨
上述代码第①行定义了Employee类。在Employee类的内部,第②行代码定义了结构体Department,第③行定义了枚举WeekDays。在枚举WeekDays的内部,第④行代码定义了结构体Day。
第⑤行代码实例化Employee返回emp实例,第⑥行代码引用嵌套结构体Department的name属性。第⑦行代码emp.day引用emp实例day属性,它是嵌套枚举类型WeekDays的类型。第⑧行代码Employee.WeekDays.Friday直接引用嵌套枚举类型WeekDays的成员值。第⑨行代码Employee.WeekDays.Day.message引用嵌套结构体Day的静态属性message。关于静态属性的知识,我们将在12.4节详细介绍。
类型嵌套便于我们访问外部类的成员,但它会使程序结构变得不清楚,使程序的可读性变差。
