この記事では「The Swift Programming Language」を1から読んだ感想とか発見を書いてみようと思います。
「The Swift Programming Language」とはSwiftの公式ドキュメントでiBooksや下ページで見る事ができます。
The Swift Programming Language (Swift 2.1): About Swift
読んだ所
今回はSubscripts
という項目を読みました。
The Swift Programming Language (Swift 2.1): Subscripts
学んだこと
Subscriptの定義
下のようにvalue[0]
というプロパティーアクセスをしたい場合はsubscript
を使います。
class MyClass { subscript(value: Int) -> String { get { return "AAA" } } } MyClass()[0]
構造体でも同じです。
struct MyStruct { subscript(value: Int) -> String { get { return "AAA" } } } MyStruct()[0]
値をセットしたい場合はset
を定義します。
get
がない場合はエラーになります。
class MyStruct { subscript(value: Int) -> String { get { return "AAA" } set { } } } var struct = MyStruct() struct[0] = "AAA"
Voidを戻り値にする事もできるようです。
空タプルをセットする事ができます。
struct MyStruct { subscript(value: Int) -> Void { get { } set { } } } a[0] = ()
複数の値を扱うSubscript
下のように複数の値を扱うSubscriptも定義できます。
struct MyStruct { subscript(value: Int, value2: Int) -> Void { get { } set { } } } var struct = MyStruct() print(struct[1, 0]) struct[1, 0] = ()
struct MyStruct { subscript(value: Int, value2: Int) -> Void { get { } set { } } } var struct = MyStruct() print(struct[1, 0]) struct[1, 0] = ()
可変長引数にも対応しています。
struct MyStruct { subscript(value: Int, value2: Int...) -> Void { get { } } } var struct = MyStruct() print(struct[1, 0, 1, 2])
ラベルを付ける事もできます。
struct MyStruct { subscript(value value: Int, value2: Int) -> Void { get { } } } let struct = MyStruct() print(struct[a: 1, 2])
デフォルト引数はDefault argument is only permitted for a non-curried funcion parameter
ってエラーで使えませんでした。
struct MyStruct { // これはエラー subscript(value value: Int = 1, value2: Int) -> Void { get { } } }