扩展:可以给一个现有的类,结构体,枚举,还有协议添加新的功能
1、添加计算型实例属性和计算型类属性
2、定义实例方法和类方法
3、提供新的构造器
4、定义下标
5、定义和使用新的嵌套类型
6、使已经存在的类型遵循(conform)一个协议
语法:使用 extension 关键字声明扩展
extension SomeType {
// 在这里给 SomeType 添加新的功能
}
扩展可以扩充一个现有的类型,给它添加一个或多个协议。
extension SomeType: SomeProtocol, AnotherProtocol {
// 协议所需要的实现写在这里
}
协议:
1、协议的定义:与类、结构体和枚举的定义非常相似
protocol SomeProtocol {
// 这里是协议的定义部分
}
2、遵循某个协议,各协议之间用逗号(,)分隔
struct SomeStructure: FirstProtocol, AnotherProtocol {
// 这里是结构体的定义部分
}
3、把父类放到协议前面
class SomeClass: SomeSuperClass, FirstProtocol, AnotherProtocol {
// 这里是类的定义部分
}
协议的属性要求:
1、只指定属性的名称和类型,并标明属性是 可读的 还是 可读可写的。
2、协议总是用 var 关键字来声明变量属性,在类型声明后加上 { set get } 来表示属性是可读可写的,可读属性则用 { get } 来表示:
protocol SomeProtocol {
var mustBeSettable: Int { get set } // 可读可写
var doesNotNeedToBeSettable: Int { get } // 只读
}
3、协议中定义类型属性使用 static 关键字。当类类型遵循协议时,除了 static 关键字,还可以使用 class 关键字来声明类型属性:
protocol AnotherProtocol {
static var someTypeProperty: Int { get set }
}
协议的方法要求:
1、遵循协议的类型要实现