11.5 类型嵌套
Swift语言中的类、结构体和枚举可以进行嵌套,即在某一类型的{}
内部定义类。这种类型嵌套在Java中称为内部类,在C#中称为嵌套类,它们的形式和设计目的都是类似的。
类型嵌套的优点是能够访问它外部的成员(包括方法、属性和其他的嵌套类型),嵌套还可以有多个层次。
下面我们看一个示例:
class Employee { ①
var no : Int = 0
var name : String = ""
var job : String = ""
var salary : Double = 0
var dept : Department = Department()
var day : WeekDays = WeekDays.Friday
struct Department { ②
var no : Int = 10
var name : String = "SALES"
}
enum WeekDays { ③
case Monday
case Tuesday
case Wednesday
case Thursday
case Friday
struct 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节详细介绍。
类型嵌套便于我们访问外部类的成员,但它会使程序结构变得不清楚,使程序的可读性变差。