プロパティのオーバーライドを調べていて気づきました。
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 です。
class BasePropClass {
let readOnlyProp: String = "readonly"
var readWriteProp:String = "readwrite"
}
気をつけるポイント
let は、デフォルト値設定 もしくは、init でのタイミングでしか値をセットすることができません。
var については、特に制限なくいつでも変更できます。
ただし、いずれにしても、インスタンス生成時に値が決まっていることは必要ですので、initializer を理解することも必要となります。
[Swift] 脱初心者 class initializer おさらい(1: designated initializer と convenience initializer)
[Swift] 脱初心者 class initializer おさらい(2: クラス継承と required initializer)
[Swift] 脱初心者 class initializer おさらい(3: failable initializer)
説明は以上です。
不明な点やおかしな点ありましたら、ご連絡いただけるとありがたいです。
Sponsor Link