关键词:Swift, iOS, 扩展
概述
- 可以给一个现有的类,结构体,枚举,协议添加新功能。
- 不能重写已经存在的功能。
- 与OC的分类非常相似,只是Swift的扩展没有名字。
Swift 中的扩展可以:
- 添加计算型实例属性和计算型类属性
- 定义实例方法和类方法
- 提供新的构造器
- 定义下标
- 定义和使用新的嵌套类型
- 使已经存在的类型遵循一个协议
使用方法
扩展的声明:
extension SomeType {
// 在这里给 SomeType 添加新的功能
}
扩充一个现有的类型,并给它添加一个或多个协议:
extension SomeType: SomeProtocol, AnotherProtocol {
// 协议所需要的实现写在这里
}
示例
增加新功能
extension Int {
//添加一个计算属性
var ddName:String {
return "exName"
}
//添加一个函数
func someFunc() {
print("在添加的函数里")
}
//添加一个修改自身的函数
mutating func changeNum() {
self = self * 2
}
}
添加协议
protocol ExampleProtocol {
var simpleStr : String { get }
mutating func simpleFunc()
}
extension Int : ExampleProtocol {
var simpleStr: String {
return "这个数字是:\(self)"
}
mutating func simpleFunc() {
self += 10
print("这是在类型遵循的协议方法里面")
}
}
构造器相关
- 可以给现有的类添加便利构造器,但不能添加指定构造器或析构器。
- 类的指定构造器和析构器,必须由类的原始实现提供。
class FileClass {
var name: String = "aaa"
var width: Float = 11
init(width: Float) {
self.width = width
}
}
extension FileClass {
//添加一个函数
func showName() {
print("打印下名称:\(self.name)")
}
//添加一个便利构造器
convenience init(name:String, width:Float) {
self.init(width:width)
self.name = name
}
}