Swift 中的枚举类型可以辅助实现特定的类或者结构体的功能。swift支持类型嵌套,把需要嵌套的类型的定义写在被嵌套的类型的{ } 中。 考虑下面的情景,某市的中学生需要定制校服,根据学生的年纪和款式定制不同的校服,所以在定制校服计划时就要考虑所有的年级和款式,年级和款式有多个值,这里就形成了一个类型的嵌套。可以使用枚举类型,先来定义一个嵌套有枚举的结构体:
struct SchoolUniform {
enum Style:String {
case Sports = “运动服”,Suit = “中山装”
}
enum Grade:String {
case One = “初一”,Two = “初二” , Three = “初三”
}
let myStyle:Style
let myGrade:Grade
func customize() {
print(“我的年级\(myGrade.rawValue) 我的款式\(myStyle.rawValue)”)
}
}
let uniform4XiaoMing = SchoolUniform(myStyle: .Suit, myGrade: .One) //使用默认构造器。
uniform4XiaoMing.customize() //会输出“我的年级初一我的款式中山装”
每个学生的条件只能符合枚举中的其中一项,这也是我们选择枚举的原因。可以看到在嵌套了两个枚举之后,定义了两个常属性用来选定枚举中的元素,嵌套的枚举只是为属性提供一个类型,所有的操作依旧是针对属性的。
之前在介绍构造器的相关知识时讲过,在结构体中没有定义构造器的情况下系统会默认生成一个包含所有属性的构造器。上例中在实例化学生校服时使用了这个默认的构造器,在参数中指定了两个枚举类型的属性的值。另外需要注意的是,在传入实参的时候传入的是 enum 的 case 的名称,要想获得这个名称所表示的值,就需要使用 case名称的 rawValue属性。
通过 “点方法” 也可以直接获取类型中嵌套类型的值,比如下列的用法:
print(SchoolUniform.Style.Suit.rawValue) //输出“中山装”.
嵌套的类型如果是用作辅助功能,请记得加上 private关键字,避免外部访问。
过了一遍,脑子感觉跟不上,没看懂啥意思,后面慢慢消化和总结补充吧。