在現有類和結構體的類型基礎上,擴展新的功能。 語法:html
[html] view plaincopyui
extension SomeType{ this
// new functionality to add to SomeType goes here spa
} .net
An extension can extend an existing type to make itadopt one or more protocols.Where this is the case, orm
the protocol names are written in exactly the sameway as for a class or structure: htm
extension SomeType: SomeProtocol,AnotherProtocol { blog
// implementation of protocol requirements goes here three
} ci
計算屬性
[html] view plaincopy
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.mm
println("One inch is \(oneInch) meters")
// prints "One inch is 0.0254 meters"
let threeFeet =3.ft
println("Three feet is \(threeFeet) meters")
// prints "Three feet is0.914399970739201 meters"
let aMarathon = 42.km + 195.m
println("Amarathon is \(aMarathon) meters long")
使用構造器
[html] view plaincopy
struct Size {
varwidth = 0.0, height = 0.0
}
struct Point {
var x = 0.0, y = 0.0
}
struct Rect {
var origin = Point()
var size= Size()
}
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)//調用 Rect 結構體構造器}
}
let centerRect = Rect(center: Point(x: 4.0, y: 4.0), size: Size(width: 3.0, height: 3.0))
方法擴展
[html] view plaincopy
struct Size {
varwidth = 0.0, height = 0.0
}
struct Point {
var x = 0.0, y = 0.0
}
struct Rect {
var origin = Point()
var size= Size()
}
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)//調用 Rect 結構體構造器
}
}
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