19.类型嵌套
要在一个类型中嵌套另一个类型,将需要嵌套的类型的定义写在被嵌套类型的区域{}内,而且可以根据需要定义多级嵌套。
20.扩展
扩展就是向一个已有的类,结构体或枚举类型添加新功能(functionality)。这包括在没有权限获取原始码的情况下扩展类型的能力(既逆向建模)。
Swift 中的扩展可以: 1. 添加计算型属性和静态属性 2.定义实例方法和类型方法 3.提供新的构造器 4.定义下标 5.定义和使用新的嵌套类型 6.使一个已有类型符合某个接口
extension SomeType { //加到SomeType的新功能 }
extension SomeType:SomeProtocol, AnotherProtocol { //协议实现写到这里 }
21.协议
Protocol(协议)用于统一方法和属性的名称,而不实现任何功能。协议遵循者需要提供协议指定的成员,如属性,方法,操作符,下标等。
当某个类含有父类的同时实现了协议,应当把父类放在所有的协议之前,如下所示:
class SomeClass : SomeSuperClass, FirstProtocol, AnoherProtocol { 类的内容 }
委托:委托是一种设计模式,它允许类或结构体将一些需要它们负责的功能交由(委托)给其他的类型。
委托模式的实现很简单:定义协议来封装哪些需要被委托的函数和方法,使其遵循者拥有这些被委托的函数和方法。
22.泛型
Swift的数组和字典类型都是泛型集。
func swapTwoValues<T>(inout a: T, inout b: T) { let tempA = a; a = b; b= tempA }
类型约数:指定了一个必须继承自指定类的类型参数,或者遵循一个特定的协议或协议构成。
类型约数语法:func someFunction<T: SomeClass, U: SomeProtocol>(someT: T, someU: U) { } //T必须是SomeClass子类,U必须遵循SomeProtocol协议
23.高级运算符
swift为整形计算提供了5个&符号开头的溢出运算符:&+,&-,&*,&/,&%
新的全局运算符声明需要在全局域使用operator关键字声明,可以声明为前置,中置或后置的。operator prefix +++ {}