エクステンションで、既存の型にコンピューテッドのインスタンスプロパティやコンピューテッドのタイププロパティを追加することができます。この例では、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" と出力
NOTE
エクステンションで新しいコンピューテッドプロパティを追加できますが、ストアドプロパティを追加することや、既存のプロパティにプロパティオブザーバを追加することはできません。

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.