# サブスクリプト
Swiftでは、サブスクリプトは添え字のことをいいます。配列や辞書などのコレクションにアクセスできるための記述であり、配列のインデックスや辞書のキー名になります。
let array = [1,2,3,4]
let dictionary = ["key1": "value", "key2": "value"]
array[0] // 1
dictionary["key1"] // 1
# サブスクリプトの定義方法
サブスクリプトの定義方法は、subscript
キーワードを記述し、{}
内に get
キーワードでゲッタを、set
キーワードでセッタを定義します。ゲッタは必須ですが、セッタは任意になります。
struct MyStruct {
subscript(引数: 引数の型) -> 戻り値の型 {
get {
// ゲッタの処理
}
set {
// セッタの処理
}
}
}
次の例では、構造体にサブスクリプトを定義しています。Int型のインデックスを受けとり、プロパティから該当する値を返しています。
struct Person {
var pets: [String]
subscript(index: Int) -> String {
// インデックスを指定して pets の中から値を取り出す
get {
return pets[index]
}
// 新しい値を追加する
set {
pets[index] = newValue
}
}
}
var person1 = Person(pets: ["Cat", "Dog", "Rabbit"])
person1[0] // Cat
person1[1] = "Hamster"
person1[1] // Hamster
# 省略
ゲッタは必須ですが、セッタは任意なので省略することができます。セッタがない場合は、ゲッタは省略した書き方をすることができます。
get
キーワードと、{}
を省略して書くことができます。
struct Person {
var pets: [String]
// get キーワードと、{} を省略
subscript(index: Int) -> String {
return pets[index]
}
}
var person1 = Person(pets: ["Cat", "Dog", "Rabbit"])
person1[0] // Cat
# スタティックサブスクリプト | Static Subscripts
スタティックサブスクリプトは、型に紐づくサブスクリプトです。型に添え字をつけることで、プロパティの値にアクセスすることができます。
スタティックサブスクリプトを定義するには、static
キーワードを subscript の前につけます。
enum Animal: Int {
case cat = 1, dog, rabbit, hamster
// static キーワードをつける
static subscript(n: Int) -> Animal {
return Animal(rawValue: n)!
}
}
let cat = Animal[1] // cat