[Swift] Swift プロパティの readonly と readwrite の指定方法

Swift

     

TAGS:

⌛️ < 1 min.
Swift の前に使用していた Objective-C だと 属性を設定することで、”取得のみ”と明示的に宣言することができたのですが、Swift では どうなのかを説明します。

プロパティのオーバーライドを調べていて気づきました。
Swiftでは、Objective-Cみたいに明示的にプロパティに対して、Read-OnlyやRead-Writeを定義する方法がないかと思っていたんですが、実はきちんとありました。

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


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)

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です