京市保障性住房建设投资中心网站买友情链接
扩展为现有的类,结构体,枚举类型,或协议添加了新功能,这也包括了为无访问权限源代码类扩展的能力,(即所谓的逆向建模)
扩展和Obective-C中的category类似,(与oc的分类不同的是,swift的扩展没有名字。)
extension的能力。
添加计算实例属性和计算类型属性,
//: A UIKit based Playground for presenting user interfaceimport UIKit
extension Double {var km:Double {return self*1_000.0}var m: Double{return self}var nm:Double {return self/100.0}var ft:Double{return self/2.28084}
}
let oneInch = 25.4.m
print("One inch is \(oneInch) meters")
let threeFeet = 3.ft
print("Three feet is \(threeFeet) meters")
One inch is 25.4 meters
Three feet is 1.3153048876729625 meters
定义实例方法和类型方法
//: A UIKit based Playground for presenting user interfaceimport UIKit
extension Int{func repetitions(task:()->Void){for _ in 0..<self{task()}}
}
3.repetitions {print("嘿嘿")
}
嘿嘿
嘿嘿
嘿嘿
提供新初始化器。
//: A UIKit based Playground for presenting user interfaceimport UIKit
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()
}
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))
定义下标
输入下标返回下标位数的数字
//: A UIKit based Playground for presenting user interfaceimport UIKit
extension Int{subscript(digitIndex:Int)->Int{var decimalBase = 1for _ in 0 ..< digitIndex{decimalBase *= 10}return (self/decimalBase) % 10}
}12312414[0]
12312414[1]
12312414[2]
定义和使用新内嵌类型
//: A UIKit based Playground for presenting user interfaceimport UIKit
extension Int{enum Kind {case negative,zero,positive}var kind:Kind{switch self {case 0:return.zerocase let x where x > 0:return .positivedefault:return .negative}}}
使用现有的类型遵循某协议,
扩展可以向一个类型添加新的方法,但是不能重写已有的方法
mutating方法
扩展的实例方法仍可以修改或异变实例本身,结构体和枚举类型方法在修改self或本身的属性时必须标记实例方法为mutating,和原本实现一样
//: A UIKit based Playground for presenting user interfaceimport UIKit
extension Int{mutating func square(){self = self * self}
}var someInt = 3
someInt.square()