
扩展就是向一个已有的类、结构体或枚举类型添加新功能。这包括在没有权限获取原始源代码的情况下扩展类型的能力。
Swift 中的扩展可以:
1.添加计算型属性和计算静态属性
2.定义实例方法和类型方法
3.提供新的构造器
4.定义下标
5.定义和使用新的嵌套类型
6.使一个已有类型符合某个协议
extension Double { var km: Double { return self * 1_000.0 } var m : Double { return self } var cm: Double { return self / 100.0 } var mm: Double { return self / 1_000.0 } var ft: Double { return self / 3.28084 }}let oneInch = 25.4.mmprint("One inch is \(oneInch) meters")// 打印输出:"One inch is 0.0254 meters"let threeFeet = 3.ftprint("Three feet is \(threeFeet) meters")// 打印输出:"Three feet is 0.914399970739201 meters" 注: 扩展可以添加新的计算属性,但是不可以添加存储属性,也不可以向已有属性添加属性观测器
构造器
扩展可以向已有类型添加新的构造器。这可以让你扩展其它类型,将你自己的定制类型作为构造器参数,或者提供该类型的原始实现中没有包含的额外初始化选项。
扩展能向类中添加新的便利构造器,但是它们不能向类中添加新的指定构造器或析构函数。指定构造器和析构函数必须总是由原始的类实现来提供。
struct Size { var wIDth = 0.0,height = 0.0}struct Point { var x = 0.0,y = 0.0}struct Rect { var origin = Point() var size = Size()}let defaultRect = Rect()let memberwiseRect = Rect(origin: Point(x: 2.0,y: 2.0),size: Size(wIDth: 5.0,height: 5.0))extension Rect { init(center: Point,size: Size) { let originX = center.x - (size.wIDth / 2) let originY = center.y - (size.height / 2) self.init(origin: Point(x: originX,y: originY),size: size) }}let centerRect = Rect(center: Point(x: 4.0,y: 4.0),size: Size(wIDth: 3.0,height: 3.0))// centerRect的原点是 (2.5,2.5),大小是 (3.0,3.0) 方法
extension Int { func repetitions(task: () -> ()) { for _ in 0..<self { task() } }}3.repetitions({ print("Hello!")})// Hello!// Hello!// Hello! extension Int { func repetitions(task: () -> ()) { for _ in 0..<self { task() } }}3.repetitions{ print("Goodbye!")}// Goodbye!// Goodbye!// Goodbye! extension Int { mutating func square() { self = self * self }}var someInt = 3someInt.square()// someInt 现在值是 9 下标
extension Int { subscript(var digitIndex: Int) -> Int { var decimalBase = 1 while digitIndex > 0 { decimalBase *= 10 --digitIndex } return (self / decimalBase) % 10 }}746381295[0]// returns 5746381295[1]// returns 9746381295[2]// returns 2746381295[8]// returns 7 总结 以上是内存溢出为你收集整理的swift2 扩展全部内容,希望文章能够帮你解决swift2 扩展所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)