問題タブ [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.

0 投票する
0 に答える
1055 参照

swift - didSet とロングハンド構文 () を使用する場合、計算されたプロパティには明示的な型が必要です。

これはいい:

これにより、ビルド エラーが発生しますComputed property must have an explicit type

Array<String>()ロングハンド形式を使用して文字列配列の推定型を組み合わせる正しい構文は何didSetですか?

0 投票する
1 に答える
1892 参照

swift - didSetに無限ループがないのはなぜですか?

FirstViewController には、SecondViewController に向けるボタンがあり、SecondViewController のプロパティにデータを渡します。このプロパティにはプロパティ オブザーバーがあり、設定時に SecondViewController の新しいインスタンスを作成します。

思い通りに動作しているのに、SecondViewController のインスタンスを永久に作成して無限ループに陥らないのはなぜだろうか。そして、このようにすることは良い習慣ですか?

最初のViewController:

SecondViewController:

0 投票する
1 に答える
4028 参照

swift - クラスのプロパティを変更するときに didSet を機能させる方法はありますか?

プロパティオブザーバーを持つプロパティとしてのクラスがあります。そのクラスで何かを変更した場合、例に示すように didSet をトリガーする方法はありますか:

0 投票する
1 に答える
807 参照

swift - willset と didset は Swift で閉鎖と見なされますか?

の目的を理解してwillsetdidsetますが、それらが閉鎖と見なされるかどうかはわかりません。

それらがクロージャーである場合、次のコードは強い参照サイクルを生成するべきではありませんか?

0 投票する
2 に答える
134 参照

ios - willSet ブロックを iOS の isResting プロパティに割り当てる

willSetプロパティにステートメントを設定したいと思いisRestingます。が変更されるたびisRestingに、何らかの関数が呼び出されます。これが私が意味することです:

これは機能していません。willSet または didSet を既に定義されている iOS プロパティに割り当てることはできますか? そうでない場合、どうすれば同様の効果が得られますか?

これはドキュメントです:

https://developer.apple.com/library/mac/documentation/SceneKit/Reference/SceneKit_Framework/index.html#//apple_ref/doc/uid/TP40012283

https://developer.apple.com/library/prerelease/ios/documentation/SceneKit/Reference/SCNPhysicsBody_Class/index.html#//apple_ref/occ/instp/SCNPhysicsBody/isResting

0 投票する
5 に答える
8697 参照

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 が定義されているため、クラッシュを防ぐ必要があります。isViewLoadedviewreload()IBOutletisViewLoaded()UILabel!UILabel?したがって、ビューがロードされる前にアクセスしようとすると、アプリケーションがクラッシュします。null オブジェクト パターンを使用するため、これは Objective-C では必須ではありませんでした。

reload を 2 回呼び出す理由は、プロパティがビューの作成前または作成後に設定されるかわからないためです。たとえば、ユーザーは最初にプロパティを設定してからビュー コントローラーを提示するか、ビュー コントローラーを提示してからプロパティを更新します。

ビューがいつロードされるかについて、このプロパティが不可知論的であることが気に入っています (ビューのロード時間については何も仮定しないのが最善です)。そのため、自分のコードでこの同じパターンを (わずかに変更しただけで) 使用したいと考えています。

ここでは、2 つの場所から呼び出される新しいメソッドを作成する代わりに、didSetブロック内のコードが必要です。viewDidLoadを強制的に呼び出したいdidSetので、プロパティをそれ自体に割り当てます。ただし、Swiftではそれができません。を強制的didSetに呼び出すにはどうすればよいですか?