問題タブ [observableobject]
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 - SwiftUI でユーザー データをローカルに保存する方法
公開された値を持つ観察可能なオブジェクトを持つことを達成しようとしますtraining
。変更するたびに、カスタム構造体をユーザーのデフォルトに保存する必要があります。すべてのロード (AppState init) で、データをロードする必要があります。
これがベスト プラクティスかどうかはわかっていますが、データをローカルに保存したいと考えています。私が書いたコードが機能せず、その理由がわかりません。
私は初心者で、デバイスにデータを保存したことはありません。
swift - SwiftUI ObservedObject が望ましくない表示ビューの更新を引き起こす
画像にフィルターを適用するアプリに取り組んでいます。フィルターには、ユーザーが変更できる多くのパラメーターがあります。上記のパラメーターを含む ObservableObject を作成しました。パラメータの 1 つが変更されるたびに、ビューが以前と同じ値を表示する場合でも、ビューの目に見える更新があります。これは、パラメーターを個々の @State 変数としてモデル化した場合には発生しません。
これが予想される場合 (すべての観察対象オブジェクトが変更されるため、それに依存する各ビューが更新されます)、ObservedObject はジョブに適したツールですか? 一方、特に多数のパラメーター (たとえば 10 以上) を複数のサブビューに渡す必要がある場合は、パラメーターを個別の @State/@Binding 変数としてモデル化するのは非常に不便です。
したがって、私の質問:
ここで ObservedObject を正しく使用していますか? 目に見える更新は意図したものではありませんが、受け入れられますか?それとも、swiftUI でこれを処理するためのより良い解決策はありますか?
@ObservedObject を使用した例:
@State 変数を使用した例:
ios - ObservableObject クラス配列への変更に続いて、SwiftUI ForEach が更新されない
バックグラウンド
私のアプリには、別のビューから追加できる友人の配列があります。この友人の配列をクラスに保存しましたObservableObject
. メイン ビュー 内で、FriendListView
を使用しForEach
て、ユーザーが追加した各フレンドのカスタム ビューを表示しています。
配列に追加して、リストに新しいアイテムを表示させることができませんでした。私は、理解してまとめることができたものに基づいて、2 つの異なる試みを試みました。誰かが提供できる助けをいただければ幸いです。現在、コメントアウトされた新しい友達を追加する2番目のビューを表示する方法があり、新しい友達を自動的に保存する方法がナビゲーションバーアイテムとして存在します。
試み
試み #1
クラス初期化中に配列に追加された場合、友人のリストを表示することに成功しました。クラスメソッドを呼び出して別のビューから配列に追加することは、配列の内容を印刷できることに基づいて機能しているようですが、UI は更新されません。
これはForEach(0..<Array.count)
アプローチを使用して完了しましたが、新しいアイテムを追加した後、次のコンソール エラーが発生しました。
エラー
型式コード
UI コード
試み #2
最初の試行でエラーが表示された後、構造体に UUID を使用しForEach
てプロトコルに準拠しているため、範囲をスキップして配列の一部として提供する方法を読みました。モデル コードは最初の試みと同じままで、更新された UI コードは以下のとおりです。唯一の変更は ForEach でしたが、次のエラーを受け取りました。Identifiable
Pet
エラー
Cannot convert value of type '[Pet]' to expected argument type 'Range<Int>'
UI コード