扩展能给已有的类型(即使没有源代码)添加功能,包括计算属性,协议,初始化方法,新方法,嵌入类型,注意,扩展不允许添加存储属性
类型别名
使用typealias关键字可以给类型提供一个别名,例如下面代码中的XYString,它和String用法一样
import Foundation
typealias XYString = String
var str1:XYString="abcdefg"
print(str1.uppercased())//ABCDEFG
扩展计算属性
使用extension关键字用于扩展一个类型,下面的Double类型被添加了一个计算属性perimeter
extension Double{
var perimeter:Double{
return self * 3.14
}
}
var d:Double=2.0
print(d.perimeter)
扩展使类型符合协议
import Foundation
protocol Person {
var height:Int{get}
var color:String{get}
}
extension Double:Person{
var height:Int{
return 170
}
var color:String{
return "black"
}
}
扩展初始化方法
扩展初始化方法时可以调用原有类型的初始化方法
import Foundation
extension Double{
init (height:Double,weight:Double){
self.init(exactly: height*2+weight*2)!
}
}
var height:Double=5.0
var weight:Double=4.0
let result:Double=Double.init(height: height, weight: weight)
print(result)//18.0
扩展中添加嵌套类型
import Foundation
extension Double{
enum Kind{
case big
case middle
case small
}
var kind:Kind{
if self < 5.0{
return Kind.small;
}else if self < 10.0{
return Kind.middle
}else{
return Kind.big
}
}
}
var height:Double=5.0
print(height.kind)
扩展方法
import Foundation
extension Double{
func getPI() -> Double{
return 3.14
}
}
var height:Double=5.0
print(height.getPI())