サブスクリプトは、インスタンス名の後の角括弧内に 1 つ以上の値を記述して、型のインスタンスを問い合わせることができます。シンタックスはインスタンスメソッドシンタックスとコンピューテッドプロパティシンタックスの両方に似ています。subscript キーワードでサブスクリプト定義を記述し、インスタンスメソッドと同じようにして、1 つ以上の入力パラメータと戻り値の型を指定します。インスタンスメソッドと異なり、サブスクリプトは読み書き可能、または読み取り専用にすることができます。この振る舞いはコンピューテッドプロパティと同じように getter と setter で情報がやり取りされます。

subscript(index: Int) -> Int {
    get {
        // 適切なサブスクリプト値を返す
    }
    set(newValue) {
        // 適切な設定を実行
    }
}

newValue の型は、サブスクリプトの戻り値と同じです。コンピューテッドプロパティと同様に、setter の (newValue) パラメータを指定しないようにすることができます。何も定義しない場合、デフォルトのパラメータは newValue となります。

読み取り専用のコンピューテッドプロパティと同様に、読み取り専用のサブスクリプトでは get キーワードを落とすことができます。

subscript(index: Int) -> Int {
    // 適切なサブスクリプト値を返す
}

次の例は読み取り専用のサブスクリプト実装で、整数 n の掛け算表に相当する構造体 TimesTable を定義しています。

struct TimesTable {
    let multiplier: Int
    subscript(index: Int) -> Int {
        return multiplier * index
    }
}
let threeTimesTable = TimesTable(multiplier: 3)
print("six times three is \(threeTimesTable[6])")
// "six times three is 18" と出力

この例では、3 の掛け算表に相当する TimesTable の新しいインスタンスを生成しています。インスタンスの multiplier パラメータで利用する値として、構造体の initializer に 3 を渡しています。

threeTimesTable[6] の呼び出しで見られるようにサブスクリプトを呼び出して、threeTimesTable インスタンスを問い合わせることができています。これは 3 の掛け算表から 6 番目の項目をリクエストし、3 x 6 の値 18 を返しています。

NOTE
n の掛け算表は固定の数学規則をベースにしています。threeTimesTable[someIndex] に新しい値を設定することは適切ではなく、TimesTable のサブスクリプトは読み取り専用のサブスクリプトとして定義されています。

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.