[解決済み】Swiftで初期化中にdidSetを呼び出せるようにすることは可能か?
質問
質問
Appleのドキュメント と指定します。
willSet および didSet オブザーバは、プロパティが最初に初期化されたときには呼び出されません。それらは、プロパティの値が初期化コンテキストの外で設定されたときにのみ呼び出される。
これらを強制的に初期化時に呼び出すことは可能でしょうか?
なぜですか?
例えば、こんなクラスがあるとします。
class SomeClass {
var someProperty: AnyObject {
didSet {
doStuff()
}
}
init(someProperty: AnyObject) {
self.someProperty = someProperty
doStuff()
}
func doStuff() {
// do stuff now that someProperty is set
}
}
メソッドを作成しました。
doStuff
の中にあるプロパティを処理するだけでよいのです。
didSet
関数を使用します。 これを初期化中に強制的に呼び出す方法はありますか?
更新情報
私のクラスでは、コンビニエンス・インティライザーを削除し、初期化後にプロパティを設定することを強制することにしました。 これによって、私は
didSet
が常に呼び出されます。 これが全体的に良いのかどうかはまだ決めていませんが、私の状況にはよく合っています。
どのように解決するのですか?
独自のset-Methodを作成し、init-Methodの中で使用します。
class SomeClass {
var someProperty: AnyObject! {
didSet {
//do some Stuff
}
}
init(someProperty: AnyObject) {
setSomeProperty(someProperty)
}
func setSomeProperty(newValue:AnyObject) {
self.someProperty = newValue
}
}
を宣言することで
someProperty
を型とする。AnyObject!
(暗黙のうちに ラップされていないオプショナル)を使用する場合、self を完全に初期化するにはsomeProperty
が設定されています。を呼び出すとsetSomeProperty(someProperty)
と等価なものを呼び出していることになります。self.setSomeProperty(someProperty)
. 通常であれば これは self が完全に初期化されていないためです。というのもsomeProperty
は初期化を必要としません。 メソッドが self に依存している場合、Swift は初期化コンテキストから抜け出し didSetが実行されます。
関連
-
[解決済み】印刷します。エントリ, ":CFBundleIdentifier", Does Not Exist
-
[解決済み】"宣言はファイルスコープでのみ有効 "について
-
[解決済み] リンカーコマンドが終了コード 1 で失敗した(起動を確認するには -v を使用)、Xcode 8、Swift 3
-
[解決済み] Cordova Camera iOSの問題。NOT_FOUND_ERR
-
[解決済み] 「シミュレータで実行すると、「インストールされているプロビジョニングプロファイルが、インストールされているiOS署名アイデンティティと一致しません。
-
[解決済み] 警告 xcode 6 で暗黙の変換により整数の精度が失われる
-
[解決済み] swift3におけるセレクタ
-
[解決済み] dispatch_queue_create のキュー属性とは?
-
[解決済み] ナビゲーションアイテムのタイトルカラーを変更する方法
-
[解決済み】SwiftのwillSetとdidSetの目的は何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンカーコマンドが終了コード1で失敗(起動を確認するには-vを使用)、Xcode 8、Swift 3
-
[解決済み】Xcode 10.2.1 Command PhaseScriptExecutionが0以外の終了コードで失敗した。
-
[解決済み] 'strcmp' はこのスコープで宣言されていません。
-
[解決済み] シミュレーターiOS 13でダークモードを使用するには?
-
[解決済み] エラーです。cocoapodsでRestKitをインストール後、「サンドボックスがPodfile.lockと同期していない...」と表示される
-
[解決済み] Xcodeで実行ファイルが無効なエンタイトルメントで署名されてしまう
-
[解決済み] Xcode 4のBundle creator OS Type code ?
-
[解決済み] アラート "デバッグを続けるには、開発者ツールへのアクセスが他のプロセスの制御を必要とします。これを許可するにはパスワードを入力してください。
-
[解決済み] ナビゲーションアイテムのタイトルカラーを変更する方法
-
[解決済み] クラスは初期化子を持たない Swift