位置:首頁 > 高級語言 > Swift教學 > Swift計算型屬性

Swift計算型屬性

計算型屬性(Computed Properties)

擴展可以向已有類型添加計算型實例屬性和計算型類型屬性。下麵的例子向 Swift 的內建Double類型添加了5個計算型實例屬性,從而提供與距離單位協作的基本支持。

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")
// 打印輸出:"One inch is 0.0254 meters"
let threeFeet = 3.ft
println("Three feet is \(threeFeet) meters")
// 打印輸出:"Three feet is 0.914399970739201 meters"

這些計算屬性表達的含義是把一個Double型的值看作是某單位下的長度值。即使它們被實現為計算型屬性,但這些屬性仍可以接一個帶有dot語法的浮點型字麵值,而這恰恰是使用這些浮點型字麵量實現距離轉換的方式。

在上述例子中,一個Double型的值1.0被用來表示“1米”。這就是為什麼m計算型屬性返回self——表達式1.m被認為是計算1.0Double值。

其它單位則需要一些轉換來表示在米下測量的值。1千米等於1,000米,所以km計算型屬性要把值乘以1_000.00來轉化成單位米下的數值。類似地,1米有3.28024英尺,所以ft計算型屬性要把對應的Double值除以3.28024來實現英尺到米的單位換算。

這些屬性是隻讀的計算型屬性,所有從簡考慮它們不用get關鍵字表示。它們的返回值是Double型,而且可以用於所有接受Double的數學計算中:

let aMarathon = 42.km + 195.m
println("A marathon is \(aMarathon) meters long")
// 打印輸出:"A marathon is 42495.0 meters long"


注意:
擴展可以添加新的計算屬性,但是不可以添加存儲屬性,也不可以向已有屬性添加屬性觀測器(property observers)。