問題タブ [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 - SwiftのwillSetとdidSetの目的は何ですか?
Swift には、C# と非常によく似たプロパティ宣言構文があります。
ただし、アクションもありwillSet
ます。didSet
これらは、セッターが呼び出される前と後にそれぞれ呼び出されます。セッター内に同じコードを入れることができることを考えると、それらの目的は何ですか?
swift - SwiftでwillSetとdidSetを動的に設定する
willSet
&didSet
を使用して、Objective-C で使用する KVO タイプのコードの一部を置き換える可能性があると考えています。Objective-C の利点の 1 つは、そのダイナミズム、特に実行時に動作を作成できることです。willSet
&didSet
が私にとって有用であるためには、それらの動作を動的に割り当てることができる必要があります。それらの「コンテンツ」またはそれらが具現化する動作を動的に設定することは可能ですか? ユース ケースの 1 つは、モデルのプロパティをビューにバインドすることです。擬似コード:
class - 構造体とクラスの didSet プロシージャの動作が異なる
これをレーダーレポートとして提出しましたが、彼らが何をするかわかりません。
私が持っているのは構造体で、その構造体はインスタンス化され、クラス インスタンスによって集約されます。
構造体はオブジェクトであるため、set/get オブザーバーだけでなく、setter と getter があります。
これらのオブザーバーを使用して、構造体インスタンスの配列のインデックスを再作成しています。
取り決めは、構造体に「可視」フラグがあることです(私の実装では)。そのフラグがオフになっている (false に設定されている) 場合、コンテナー クラスはすべての構造体のインデックスを再作成して、現在非表示になっている (または現在表示されている) インスタンスをインデックスから削除する必要があります。
そのための最善の方法は、構造体インスタンスをインスタンス化するときに、それにコンテナー インスタンスへの参照を渡し、didSet { myContainer.reIndex() } ハンドラーをセットアップすることです。
問題は、構造体とクラスの動作が異なるように見えることです。値/参照の問題だと思います。
クラスでは、インスタンスの外部値は didSet が呼び出されるまでに設定されます。つまり、外部オブジェクトを呼び出してインデックスを再作成すると、新しい値が表示されます。
構造体では、didSet が実行されるまで、これは当てはまらないようです。
RADAR レポートで提出した遊び場を含めます。
私の質問は次のとおりです。構造体にはセッター/ゲッターオブザーバーが必要だと思いますか? 彼らはセッター/ゲッターを持っているべきですか?
回避策があります。値を変更した後、インデクサーを呼び出します。それはそれほど優雅ではありません。
遊び場 (以下のコードでは、didSet ハンドラー中に発行されたさまざまな値を参照してください):
swift - Swift: didSet 関数を呼び出さずにプロパティの値を変更する方法
didSet()
初期化コンテキストの外で関数を呼び出さずに、Swift でプロパティの値を設定するにはどうすればよいですか? noside()
以下のコードは、クラスの関数内でこれを達成するための失敗した実験でした
自動合成されたプロパティを使用して Objective-C で行うのは非常に簡単です。
副作用あり (setter に存在する場合):
副作用なし:
swift - プロパティ オブザーバー willSet および didSet; プロパティのゲッターとセッター
プロパティ内でこれを操作する場合、 -とwillSet
-の違いは何ですか?didSet
get
set
私の観点からは、どちらもプロパティの値を設定できます。いつ、なぜ、willSet
- didSet
、いつget
-を使用する必要がありset
ますか?
との構造は次のようにwillSet
なりdidSet
ます。
arrays - プロパティオブザーバーのdidSetでSwift配列を変更できないのはなぜですか?
Swift の Array は didSet を通過しないようですが、なぜですか?
swift - この didSet プロパティが Swift で出力を出力しないのはなぜですか?
UIPageViewController を正しく設定しました。
各ビューの itemIndex を確認し、それに応じてコンテンツを表示したいと思います。コードは次のようになります。
私が試したこと
- アプリを実行します
- コンソール出力: 「キャラクターはジョンです!」
- 前(右)にスワイプします
- コンソール出力: 「キャラクターはレラです!」
- 私は(左に)後ろにスワイプします
- 出力がありません!
- 前にスワイプします
- 出力がありません!また!
これは何が原因ですか?完全なコードは次のとおりです。