NOTE 拡張機能は型に新しい機能を追加できますが、既存の機能をオーバーライドすることはできません。
extension
キーワードを使用して拡張機能を宣言します:NOTE 拡張機能を定義して既存の型に新しい機能を追加すると、拡張機能が定義される前に作成されたものであっても、その型の既存の全てのインスタンスで新しい機能を使用できます。
Double
型に追加して、距離単位を使用するための基本的な機能を提供します。Double
の値を特定の長さの単位と見なしています。計算プロパティとして実装されていますが、ドット構文(.
)を使用して浮動小数点リテラルの後に追加して使用できます。Double
の値 1.0
が「1 メートル」を表しているため、計算プロパティ m
は self
を返します。式 1.m
は、Double
の値 1.0
を計算していると見なされます。km
は値に 1_000.00
を掛けてメートル単位の数値に変換します。同様に、メートルは 3.28084 フィート、に等しいので、 計算プロパティ ft
は、基になる Double
の値を 3.28084
で除算して、フィートからメートルに変換します。get
キーワードなしになっています。戻り値は Double
型で、Double
が使用できるところでは、計算に使用することができます:NOTE 拡張機能は新しい計算プロパティを追加できますが、格納プロパティを追加したり、既存のプロパティにプロパティオブザーバを追加したりすることはできません。
self
にアクセスできません。Rect
構造体を定義しています。この例では、Size
と Point
という 2 つの補助的な構造体も定義されており、どちらも全てのプロパティにデフォルト値 0.0
を提供します:Rect
構造体はその全てのプロパティにデフォルト値を提供しているため、Default Initializers(デフォルトイニシャライザ)で説明されているように、デフォルトイニシャライザとメンバワイズイニシャライザを自動的に生成します。これらのイニシャライザを使用して、新しい Rect
インスタンスを作成できます:Rect
構造体を拡張して、特定の中心点とサイズを取る追加のイニシャライザを提供できます:center
と size
の値に基づいて適切な原点を計算することから始まります。次に、イニシャライザは、構造体が自動で生成するメンバワイズイニシャライザ init(origin:size:)
を呼び出します。これは、適切なプロパティに新しい原点とサイズの値を格納します:NOTE 拡張機能で新しいイニシャライザを提供する場合でも、イニシャライザの完了前に完全に初期化が完了していなければなりません。
repetitions
という新しいインスタンスメソッドを Int
型に追加しています:repetitions(task:)
メソッドは、() -> Void
型の単一のパラメータを受け取ります。これは、パラメータがなく、値を返さない関数を示しています。repetitions(task:)
メソッドを呼び出して、任意の回数のタスクを繰り返し実行できます:self
またはそのプロパティを変更する構造体および列挙型メソッドは、元の実装のメソッドを変更するのと同じように、インスタンスメソッドを mutating
としてマークする必要があります。Int
型に元の値を二乗する square
と呼ばれる新しい mutating
メソッドを追加しています:Int
型に整数の subscript を追加します。この subscript[n]
は、数値の右から n
桁の 10
進数を返します。123456789[0]
は 9
を返します123456789[1]
は 8
を返します0
を返します。Int
に追加します。Kind
と呼ばれるこの列挙型は、特定の整数が表す数の種類を表します。具体的には、数値が負か、ゼロか、正かを表します。kind
と呼ばれる新しい計算インスタンスプロパティも Int
に追加しています。これは、その整数に対して適切な Kind
の列挙ケースを返します。Int
値で使用できるようになりました:printIntegerKinds(_:)
は、Int
値の入力配列を受け取り、それらの値を順番に繰り返します。配列内の各整数について、関数はその整数の kind
計算プロパティを検証し、適切な説明を出力します。NOTEnumber.kind
はInt.Kind
型なことがすでにわかっているため、Int.Kind
の各ケースは、Int.Kind.negative
ではなく.negative
など、switch
文内では省略して記述できます。