11.5 类型嵌套

Swift语言中的类、结构体和枚举可以进行嵌套,即在某一类型的{}内部定义类。这种类型嵌套在Java中称为内部类,在C#中称为嵌套类,它们的形式和设计目的都是类似的。

类型嵌套的优点是能够访问它外部的成员(包括方法、属性和其他的嵌套类型),嵌套还可以有多个层次。

下面我们看一个示例:

  1. class Employee {
  2. var no : Int = 0
  3. var name : String = ""
  4. var job : String = ""
  5. var salary : Double = 0
  6. var dept : Department = Department()
  7. var day : WeekDays = WeekDays.Friday
  8. struct Department {
  9. var no : Int = 10
  10. var name : String = "SALES"
  11. }
  12. enum WeekDays {
  13. case Monday
  14. case Tuesday
  15. case Wednesday
  16. case Thursday
  17. case Friday
  18. struct Day {
  19. static var message : String = "Today is..."
  20. }
  21. }
  22. }
  23. var emp = Employee()
  24. println(emp.dept.name)
  25. println(emp.day)
  26. let friday = Employee.WeekDays.Friday
  27. if emp.day == friday {
  28. println("相等")
  29. }
  30. println(Employee.WeekDays.Day.message)

上述代码第①行定义了Employee类。在Employee类的内部,第②行代码定义了结构体Department,第③行定义了枚举WeekDays。在枚举WeekDays的内部,第④行代码定义了结构体Day

第⑤行代码实例化Employee返回emp实例,第⑥行代码引用嵌套结构体Departmentname属性。第⑦行代码emp.day引用emp实例day属性,它是嵌套枚举类型WeekDays的类型。第⑧行代码Employee.WeekDays.Friday直接引用嵌套枚举类型WeekDays的成员值。第⑨行代码Employee.WeekDays.Day.message引用嵌套结构体Day的静态属性message。关于静态属性的知识,我们将在12.4节详细介绍。

类型嵌套便于我们访问外部类的成员,但它会使程序结构变得不清楚,使程序的可读性变差。