Swift扩展(Extension)

在现有类和结构体的类型基础上,扩展新的功能。 语法:html

[html] view plaincopyui

  1. extension SomeType{  this

  2. // new functionality to add to SomeType goes here  spa

  3. }  .net

  4. An extension can extend an existing type to make itadopt one or more protocols.Where this is the case,  orm

  5. the protocol names are written in exactly the sameway as for a class or structure:  htm

  6. extension          SomeType:            SomeProtocol,AnotherProtocol {  blog

  7. // implementation of protocol requirements goes here  three

  8. }  ci


计算属性

[html] view plaincopy

  1. extension Double{  

  2. var km: Double { return self * 1_000.0 }  

  3. var m: Double { return self }  

  4. var cm: Double { return self / 100.0}  

  5.  var mm: Double { return self /1_000.0 }  

  6. var ft: Double { return self / 3.28084 }  

  7. }  

  8. let oneInch = 25.4.mm  

  9. println("One inch is \(oneInch) meters")  

  10. // prints "One inch is 0.0254 meters"  

  11. let threeFeet =3.ft  

  12. println("Three feet is \(threeFeet) meters")  

  13. // prints "Three feet is0.914399970739201 meters"  

  14. let aMarathon = 42.km + 195.m  

  15. println("Amarathon is \(aMarathon) meters long")  

使用构造器

[html] view plaincopy

  1. struct Size {  

  2. varwidth = 0.0, height = 0.0  

  3. }  

  4. struct Point {  

  5. var x = 0.0, y = 0.0  

  6. }   

  7. struct Rect {  

  8. var origin = Point()  

  9. var sizeSize()  

  10. }  

  11. extension Rect{  

  12. init(center: Point, size: Size) {  

  13. let originX = center.x - (size.width / 2) let originY = center.y - (size.height/ 2) self.init(origin: Point(x: originX, y: originY),  

  14. size: size)//调用 Rect 结构体构造器}   

  15. }  

  16. let centerRect = Rect(center: Point(x: 4.0, y: 4.0), size: Size(width: 3.0, height: 3.0))  

方法扩展

[html] view plaincopy

  1. struct Size {   

  2. varwidth = 0.0, height = 0.0  

  3. }  

  4. struct Point {  

  5. var x = 0.0, y = 0.0  

  6. }  

  7. struct Rect {  

  8. var origin = Point()  

  9. var sizeSize()  

  10. }  

  11. extension Rect{  

  12. init(center: Point, size: Size) {  

  13. let originX = center.x - (size.width / 2) let originY = center.y - (size.height/ 2) self.init(origin: Point(x: originX, y: originY),  

  14. size: size)//调用 Rect 结构体构造器  

  15. }  

  16. }  

  17. let centerRect = Rect(center: Point(x: 4.0, y: 4.0), size: Size(width: 3.0, height: 3.0))  


Swift交流讨论论坛论坛:http://www.cocoagame.net

欢迎加入Swift技术交流群:362298485