エクステンションで、既存の型にコンピューテッドのインスタンスプロパティやコンピューテッドのタイププロパティを追加することができます。この例では、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
print("One inch is \(oneInch) meters")
// "One inch is 0.0254 meters" と出力
let threeFeet = 3.ft
print("Three feet is \(threeFeet) meters")
// "Three feet is 0.914399970739201 meters" と出力
これらのコンピューテッドプロパティは、Double
値をある長さの単位としてみなすように表現しています。コンピューテッドプロパティとして実装されていますが、距離の変換に浮動小数点のリテラル値を使用する手段として、リテラル値にドットシンタックスでプロパティの名前を追加することができます。
この例では、Double
値の 1.0
が 1 メートルにあたります。そのため、1.m
は Double
値の 1.0
で、コンピューテッドプロパティ m
は self
を返します。
他の単位ではメートル値への変換が必要です。1 キロメートルは 1,000 メートルと同じであり、コンピューテッドプロパティ km
は、メートルに変換するために値を 1_000.00
で乗算します。同じように、1 メートルは 3.28084 フィートで、コンピューテッドプロパティ ft
は、フィートからメートルに変換するために Double
値を 3.28084
で除算します。
これらのプロパティは読み取り専用のコンピューテッドプロパティであり、簡潔にするため get
キーワード無しで表現されています。戻り値が Double
型で、Double
の数学計算に使用することができます。
let aMarathon = 42.km + 195.m
print("A marathon is \(aMarathon) meters long")
// "A marathon is 42195.0 meters long" と出力
Portions of this page are translations based on work created and shared by Apple and used according to terms described in the Creative Commons Attribution 4.0 International License.