プロパティのアクセスコントロール

Swiftのプロパティで、「getterは外部に公開したいけれど、setterはプライベートにしたい。けれどもcomputed propertyを使って値を保持する変数をわざわざ別に持つのは面倒だ」というケースはよくあります。

そのような場合、「private(set)/internal(set)」のようなアクセスレベル修飾子を変数宣言時に用います。たとえば

private(set) var foo: Int

というように記述すると、「getterはinternal、setterはprivate」というように、getter/setterでアクセス可能な範囲に変化をつけられます。「The Swift Programming Language (Swift 2.1)」の「Language Reference - Declarations」によると、アクセスレベル修飾子には次の3種類があるようです。

  • access-level-modifier → internal internal(set) ‌- access-level-modifier → private private(set) ‌- access-level-modifier → public public(set)

publicまで用意されているというのは面白いですね。使うかどうかはともかく、getterの方がアクセスレベルが緩くなるようできますので。