問題タブ [didset]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
swift - didSet とロングハンド構文 () を使用する場合、計算されたプロパティには明示的な型が必要です。
これはいい:
これにより、ビルド エラーが発生しますComputed property must have an explicit type
。
Array<String>()
ロングハンド形式を使用して文字列配列の推定型を組み合わせる正しい構文は何didSet
ですか?
swift - didSetに無限ループがないのはなぜですか?
FirstViewController には、SecondViewController に向けるボタンがあり、SecondViewController のプロパティにデータを渡します。このプロパティにはプロパティ オブザーバーがあり、設定時に SecondViewController の新しいインスタンスを作成します。
思い通りに動作しているのに、SecondViewController のインスタンスを永久に作成して無限ループに陥らないのはなぜだろうか。そして、このようにすることは良い習慣ですか?
最初のViewController:
SecondViewController:
swift - クラスのプロパティを変更するときに didSet を機能させる方法はありますか?
プロパティオブザーバーを持つプロパティとしてのクラスがあります。そのクラスで何かを変更した場合、例に示すように didSet をトリガーする方法はありますか:
swift - willset と didset は Swift で閉鎖と見なされますか?
の目的を理解してwillset
いdidset
ますが、それらが閉鎖と見なされるかどうかはわかりません。
それらがクロージャーである場合、次のコードは強い参照サイクルを生成するべきではありませんか?
ios - willSet ブロックを iOS の isResting プロパティに割り当てる
willSet
プロパティにステートメントを設定したいと思いisResting
ます。が変更されるたびisResting
に、何らかの関数が呼び出されます。これが私が意味することです:
これは機能していません。willSet または didSet を既に定義されている iOS プロパティに割り当てることはできますか? そうでない場合、どうすれば同様の効果が得られますか?
これはドキュメントです:
ios - プロパティをそれ自体に割り当てたい場合はどうすればよいですか?
次のコードを実行しようとすると:
エラーが発生します:
プロパティをそれ自体に割り当てます。
photographer
didSet
プロパティをそれ自体に割り当てて、ブロックを強制的に実行したいと考えています。
実際の例を次に示します。2013年冬期のスタンフォード iOS コース(13:20) の「16. セグエとテキスト フィールド」の講義で、教授は次のようなコードを書くことを推奨しています。
注: 次の変更を行いました。(1) コードが Objective-C から Swift に切り替えられました。(2) Swift なので、メソッドdidSet
の代わりにプロパティのブロックを使用します。(3) 前者は、プロパティへのアクセス時に誤ってビューを強制的にロードするため、setPhotographer:
代わりにself.view.window
使用しています。(4)メソッド (のみ) は、簡単にするためにラベルを更新し、それは私のコードによりよく似ているためです。(5)このより単純なコードをサポートするために写真家のラベルが追加されました。(6) Swift を使用しているため、単にパフォーマンス上の理由からチェックが存在しなくなりました。IBOutlet が定義されているため、クラッシュを防ぐ必要があります。isViewLoaded
view
reload()
IBOutlet
isViewLoaded()
UILabel!
UILabel?
したがって、ビューがロードされる前にアクセスしようとすると、アプリケーションがクラッシュします。null オブジェクト パターンを使用するため、これは Objective-C では必須ではありませんでした。
reload を 2 回呼び出す理由は、プロパティがビューの作成前または作成後に設定されるかわからないためです。たとえば、ユーザーは最初にプロパティを設定してからビュー コントローラーを提示するか、ビュー コントローラーを提示してからプロパティを更新します。
ビューがいつロードされるかについて、このプロパティが不可知論的であることが気に入っています (ビューのロード時間については何も仮定しないのが最善です)。そのため、自分のコードでこの同じパターンを (わずかに変更しただけで) 使用したいと考えています。
ここでは、2 つの場所から呼び出される新しいメソッドを作成する代わりに、didSet
ブロック内のコードが必要です。viewDidLoad
を強制的に呼び出したいdidSet
ので、プロパティをそれ自体に割り当てます。ただし、Swiftではそれができません。を強制的didSet
に呼び出すにはどうすればよいですか?