エクステンションで、既存の型に新しいインスタンスメソッドとタイプメソッドを追加することができます。次の例では、Int 型に新しいインスタンスメソッド repetitions を追加しています。

extension Int {
    func repetitions(task: () -> Void) {
        for _ in 0..<self {
            task()
        }
    }
}

repetitions(_:) メソッドは、パラメータが無く、値を返さない関数を示す () -> Void 型の引数を 1 つ取ります。

このエクステンションを定義後、整数の回数分タスクを実行するために repetitions(_:) メソッドを呼び出すことができます。

3.repetitions({
    print("Hello!")
})
// Hello!
// Hello!
// Hello!

より簡潔に呼び出すには、後置クロージャのシンタックスを利用します。

3.repetitions {
    print("Goodbye!")
}
// Goodbye!
// Goodbye!
// Goodbye!

インスタンスメソッドを変更

エクステンションで追加されたインスタンスメソッドは、インスタンス自体を変更 (mutate) することもできます。self やそのプロパティを変更する構造体や列挙型のメソッドは、オリジナルの実装からメソッドを変更するのと同じように、インスタンスメソッドに mutating を付ける必要があります。

次の例では、オリジナルの値を 2 乗する新しい mutating メソッド square を Swift の Int 型に追加しています。

extension Int {
    mutating func square() {
        self = self * self
    }
}
var someInt = 3
someInt.square()
// someInt は 9

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.