У меня проблема с обновлениями в моем приложении. Я не очень хорошо понимаю, что происходит с потоком данных между подпредставлениями.
Это моя текущая структура
Что происходит:
Каждый раз, когда я изменяю список, обновления MainView запускают новую перестройку ChildView, но NephewView не обновляет
Что яхотел бы иметь:
Я хотел бы обновлять представления Main, Child и NephewView каждый раз, когда наблюдаемый объект получает обновление
Проблема:
Я не могупонять, почему, если перестроить Child View, племянник этого не сделает.
ПримерКод
class ViewModel: ObservableObject {
let userData = UserData.shared
var canceller: AnyCancellable?
@Published var items: [Items]
init() {
items = []
canceller = userData.objectWillChange
.throttle(for: 5, scheduler: RunLoop.main, latest: true)
.sink(receiveCompletion: { data in
DispatchQueue.main.async { [weak self] in
guard let self = self else { return }
self.items = data.items
}
},
receiveValue: { _ in
DispatchQueue.main.async { [weak self] in
guard let self = self else { return }
self.items = data.items
}
})
}
}
struct MainView: View {
@ObservedObject var model = ViewModel()
var body: some View {
ChildView(items: model.items)
}
}
struct ChildView: View {
let items: [Items]
var body: some View {
NephewView(items: items)
}
}
struct NephewView: View {
let items: [Items]
var body: some View {
List...
}
}
Раковина работает правильно, только часть пользовательского интерфейса не получает обновлений. Может быть, способ обновления издателя неправильный?