[解決済み] Swift の外部読み取り専用、内部読み書き可能なプロパティ
質問
Swift では、プロパティが外部からは読み取り専用であるが、それを所有するクラス (およびサブクラス) によって内部的に変更可能であるという一般的なパターンを定義する従来の方法は何ですか。
Objective-Cでは、以下の選択肢があります。
- インターフェイスでプロパティを readonly として宣言し、クラス拡張を使用して内部でプロパティにアクセスする。これはメッセージベースのアクセスであるため、KVO、アトミック性などとうまく連動します。
- インターフェイスでプロパティを readonly として宣言し、内部でバッキング ivar にアクセスします。ivar のデフォルトのアクセスは protected であるため、これはクラス階層でうまく機能し、サブクラスも値を変更できるようになりますが、フィールドはそれ以外では readonly です。
Javaでは、規約は
- protectedフィールドを宣言し、publicで読み取り専用のゲッター(メソッド)を実装します。
Swiftのイディオムってなんですか?
どのように解決するのですか?
クラスのプロパティがある場合、プロパティ宣言の前にアクセス修飾子を付け、その後に
get
または
set
のように括弧で囲みます。例えば、パブリックゲッターとプライベートセッターを持つクラスのプロパティは、次のように宣言されます。
private(set) public var readonlyProperty: Int
お勧めの読み物 ゲッターとセッター
マーティンのアクセシビリティレベルに関する考察はまだ有効です。
protected
修飾子がないことです。
internal
はモジュールへのアクセスのみを制限します。
private
は現在のファイルのみに、そして
public
は制限なし。
Swift 3 のメモ
2つの新しいアクセス修飾子。
fileprivate
と
open
が言語に追加され、一方
private
と
public
は少し修正されています。
-
open
はクラスとクラスメンバにのみ適用されます。これは、クラスがサブクラス化されたり、メンバが定義されたモジュールの外部でオーバーライドされたりすることを許可するために使用されます。public
を使用すると、クラスやメンバは一般にアクセスできるようになりますが、継承やオーバーライドはできません。 -
private
はメンバーを可視化し、囲んでいる宣言からのみアクセスできるようにします。fileprivate
はそのメンバが含まれるファイル全体に対して
その他の詳細 こちら .
関連
-
[解決済み] リフレクションを使用して文字列からプロパティ値を取得する
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] Pythonの@propertyデコレーターはどのように機能するのでしょうか?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] オブジェクトのプロパティを値でソートする
-
[解決済み] 変数を使用してオブジェクトのプロパティに動的にアクセスする
-
[解決済み] プロパティとゲッターとセッターの使い分け
-
[解決済み] なぜアイバーを使うのですか?
-
[解決済み] ベストプラクティス - 自分のプロジェクト/アプリのためのNSErrorドメインとコード
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 角括弧 < > と引用符 " " を使って #import する。
-
[解決済み] Objective-Cです。カテゴリ内のプロパティ/インスタンス変数
-
[解決済み] Swiftでクラスをプロトコルに準拠させるには?
-
[解決済み] インスタンスメッセージの受信型'CALayer'は前方宣言である」とはどういう意味か?
-
[解決済み] switch文の中で変数を宣言する [重複]。
-
[解決済み] キーチェーンのアイテムは何がユニークなのか(iOSの場合)?
-
[解決済み] 「アプリケーションはアクティブなコントローラを表示しようとした」?
-
[解決済み] UIButtonsの背景色を変更することはできますか?
-
[解決済み] AppDelegateからストーリーボード上の異なる場所で条件付きで開始する。
-
[解決済み] Objective-Cでクラスのインスタンスを@protocolにキャストする