Swift の前に使用していた Objective-C だと 属性を設定することで、”取得のみ”と明示的に宣言することができたのですが、Swift では どうなのかを説明します。
プロパティのオーバーライドを調べていて気づきました。
Swiftでは、Objective-Cみたいに明示的にプロパティに対して、Read-OnlyやRead-Writeを定義する方法がないかと思っていたんですが、実はきちんとありました。
Sponsor Link
let と var
Swift では、プロパティ宣言時に let と var のどちらかを使うかで、readonly と read-write を設定することができました。
もちろん、let が readonly 指定で、var が read-write 指定です。
この件を調べていて発見したのですが、実は、Objective-C では、readonly としても、setter が生成されないだけでした・・・・
ですので、自分で書けば値を更新できてしまいます。
ちなみに、Swift では、let と var は、言語仕様から来ていますので、let 宣言されたプロパティを後から変更することはできません。
その定義方法は?
以下のように、let と var を使って、プロパティを定義すれば OK です。
example code
1 2 3 4 5 6 |
class BasePropClass { let readOnlyProp: String = "readonly" var readWriteProp:String = "readwrite" } |
気をつけるポイント
let は、デフォルト値設定 もしくは、init でのタイミングでしか値をセットすることができません。
var については、特に制限なくいつでも変更できます。
ただし、いずれにしても、インスタンス生成時に値が決まっていることは必要ですので、initializer を理解することも必要となります。



説明は以上です。
不明な点やおかしな点ありましたら、ご連絡いただけるとありがたいです。
Sponsor Link