と呼ばれるEnvironmentObjectを取り込むSwiftUIビューがありますappModel
。次にappModel.submodel.count
、そのbody
メソッドで値を読み取ります。これにより、ビューがプロパティcount
にバインドされsubmodel
、プロパティが更新されたときに再レンダリングされることが期待されますが、これは発生しないようです。
これはバグですか?そうでなければ、SwiftUIで環境オブジェクトのネストされたプロパティにビューをバインドする慣用的な方法は何ですか?
具体的には、私のモデルは次のようになります...
class Submodel: ObservableObject {
@Published var count = 0
}
class AppModel: ObservableObject {
@Published var submodel: Submodel = Submodel()
}
そして私の見解はこのように見えます...
struct ContentView: View {
@EnvironmentObject var appModel: AppModel
var body: some View {
Text("Count: \(appModel.submodel.count)")
.onTapGesture {
self.appModel.submodel.count += 1
}
}
}
アプリを実行してラベルをクリックすると、count
プロパティは増加しますが、ラベルは更新されません。
これをappModel.submodel
プロパティとしてに渡すことで修正できますがContentView
、できれば避けたいと思います。
私もこのようにアプリを設計しています。私は通常、過去のアプリ開発でグローバルAppオブジェクトを持っています。このスーパー "App"クラスの設計は、環境変数が標準的なプラクティスになると誰もが考えていますか?複数のEnvironmentObjectsの使用も検討していましたが、それを維持するのは困難でした。
—
Michael Ozeryansky、