問題タブ [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 投票する
1 に答える
72 参照

set - スライダーが別のタスクに使用されるときに元のスライダー値を保持する

スライダーの値が他の何かに使用されている場合、幅の制約のスライダーの値を保持するために、以下の迅速なコードが必要です。下のgifで何が起こっているかを見ることができます。スライダーの値が別の目的で使用されると、制約が変更されます。スライダーの値が何か他のものと見なされる場合、制約は変更されるべきではありません。 ここに画像の説明を入力

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

swift - Swift: 配列は設定されていますが、アクセスすると空になります

特定の API が呼び出されると設定される配列があります。ただし、後でこの配列にアクセスしようとすると、再び空になります。

問題のクラスは次のようになります。

私が注目している変数は、sourceList 変数です。

ここで、このオブジェクトが作成されるクラスで、次のように SearchableLoginFormField を宣言します。

次に、次のデリゲート メソッドを使用して sourceList を設定します。

これは、空港リストが API 呼び出しから取得されるときに呼び出されます。

ブレーク ポイントは、sourceList が正しく設定されていることを証明します。

  • airportsSet() デリゲート メソッドがヒットし、正しい空港リストが含まれている
  • SearchableLoginFormField の didSet メソッドが起動され、sourceList が Airports リストに正常に設定されます
  • フィールドの編集時に textField デリゲート メソッドをヒットすると、sourceList が空です。configureFormField() メソッドを sourceList の didSet に移動しようとしましたが、同じ結果になりました。

これがどのように設定されているように見えるが、再び空になるのか、私は本当に混乱しています。私は didSet にブレークポイントを保持していますが、他のものによって空に設定されることはありません。

スーパークラスには次の変数が含まれています。

および次の textFieldDelegate メソッド:

したがって、configureFormField メソッドでは、トリガーされるこのデリゲート メソッドのアクションを適宜設定しています。この時点で、sourceList は空です。

フィールド自体は、次のようにメイン ディスプレイ viewController の viewDidLoad に追加されます。