扩展属性(只能是计算属性)
//扩展可以添加新计算属性, 但是不能添加存储属性(也不可以添加属性观察).
extension Double{ //为API中的已有类型添加实例属性
var km : Double { return self * 1_000.0 }
}
let jjLength = 1.m // 1与m进行点运算, 表示1的Double值
扩展构造器
//可以定制自己的构造器
class MyClass{
var a : Int
init(){
a = 10
}
}
extension MyClass{
convenience init(var parm:Int){ //扩展构造器
self.init()
println("扩展构造器--->便利构造器, \(parm)")
}
}
var myClass = MyClass(parm: 9)
扩展方法
通过扩展方法, 可以修改该实例self本身.但是方法前要加 mutating
extension Double{
mutating func myMoidfySelfValue{
self = self * self //修改self实例的值
}
}
var d = 2.0
d.myMoidfySelfValue()
扩展下标
extension Int {
enum Kind {
case Negative, Zero, Positive
}
var kind: Kind {
switch self {
case 0:
return .Zero
case let x where x > 0:
return .Positive
default:
return .Negative
}
}
}
嵌套类型
extension Int {
enum Kind {
case Negative, Zero, Positive
}
var kind: Kind {
switch self {
case 0:
return .Zero
case let x where x > 0:
return .Positive
default:
return .Negative
}
}
}