サブスクリプトは、インスタンス名の後の角括弧内に 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
を返しています。
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.