問題タブ [environmentobject]

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 に答える
57 参照

mvvm - EnvironmentObject ビュー モデル内のタイマーがビューを更新しない

複数の子ビュー モデルを持つビュー モデルがあります。私はwatchOS、SwiftUI、およびCombineにかなり慣れていません-この機会に学びましょう。

私はそれがあるwatchUIを持っています

  1. 再生ボタン (ビュー) -SetTimerPlayPauseButton
  2. 時刻を表示するテキスト (ビュー) -TimerText
  3. ビュー モデル - 1 WatchDayProgramViewModel- N: ExerciseTestClass- N:を持つSetInformationTestClass。各エクササイズ セットには があり、watchTimer & watchTimerSubscription残りの休憩時間を更新するためにタイマーを実行することができました。
  4. ContentView - ViewModel として注入されたものEnvironmentObject

タップSetTimerPlayPauseButtonしてタイマーを開始すると、タイマーが実行され、動作し、remainingRestTime(子ビュー モデル内のプロパティSetInformationTestClass) が正しく変更されますが、更新/変更はTimerTextViewに「公開」されません。

すべてではないにしても、ほとんどの推奨事項を他のSOの回答行いましWatchDayProgramViewModelExerciseTestClassSetInformationTestClass@Published.

ここに画像の説明を入力

私のコードを見直して、それを改善する方法についてアドバイスをください。

コンテンツ ビュー

SetRestDetailView

タイマーテキスト

ビューモデル

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

json - SwiftUI - リモート JSON データのデータを取得して、アプリの起動時に更新します

私は初心者です(そして、私のコード/モデルは現在それを表示するので、私に気楽に行ってください!)。

レシピ スタイル (cenotes) アプリの作成に初めて取り組んでいます。

データを更新できるように、リモート json ファイルがあるため、ユーザーは更新されたデータを取得するために再インストールする必要がありません。

アプリはデータを正常に取得して解析します (これは成功です!)が、最初にインストールしたときのみです。

その後、オンラインで変更されたデータは更新されません。.onAppear と .refreshable を使用してみましたが失敗しました。更新されたデータを取得するには、アプリを削除して再インストールする必要があります。

以下は、私のファイルの編集済みバージョンの一部です。@StateObject/@EnvironmentObject または同様のものが間違っていると思いますが、エラーを見つけることはできません。

Locations.swift

Location.swift - VM

App.swift - アプリはこのタブ ビューで開きます

ListView.swift - 最初に選択されたタブはこのビューです - これらの場所は最初のインストール後に更新されません:

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

swiftui - SwiftUI View init()で「environmentObject」に依存する「var」を初期化する方法は?

ビューの関数内の@EnvironmentObject(またはその他の)に依存するいくつかの内部変数を初期化するより自然な方法 (現在は 2022 年) はありますか?@ObservedObjectinit()

たとえば、次の図は、私がやろうとしていること (コメント アウト) と機能することを示しています。残念ながら、「機能する」コードはかなり扱いにくい (かさばる、反復的) です。単にdiaryvar を使用する代わりに、コードを振りかけるtry? log.readDiary(for: state.now)か、すべてをサブビューでラップする必要があります。ベストプラクティスとは何かを考えています。

ここに関連する投稿があります: Swiftui - How do I initialize an observedObject using an environmentobject as a parameter? 、しかし、単純な初期化のように見えるものを達成するために内部サブビューを作成したくありません。それはただ...無駄で、繰り返しが多く、扱いにくいようです。それ以来、API が少し進化していることを願っています。