라는 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 객체를 가지고 있습니다. 다른 사람이 환경 변수로서 슈퍼 "앱"클래스의 디자인이 표준 관행이 될 것이라고 생각합니까? 또한 여러 EnvironmentObjects 사용을 고려하고 있었지만 유지 관리하기가 어렵습니다.
—
Michael Ozeryansky