gpt4 book ai didi

iOS SwiftUI : Data Flow Flow in Subviews @ObservedObject

转载 作者:行者123 更新时间:2023-12-01 15:44:33 30 4
gpt4 key购买 nike

我的应用程序有更新问题。我不太明白 subview 之间的数据流是怎么回事。

这是我目前的结构

  • ViewModel:ObsebsrvableObject

  • MainView 与 ObservedObject (viewModel)

    • ChildView 带有来自 MainView 观察对象的列表(只是列表作为普通数组传递 - 不可绑定(bind))
      • NephewView 将列表传递给 childView,仍然是普通数组

发生了什么:

每次我修改列表时,MainView 都会更新并触发 ChildView 的新重建,但 NephewView 不会更新

我想要的:

我想在每次 observedObject 获得更新时更新 Main、Child 和 NephewView View

问题:

我不明白为什么如果重建了 subview ,侄子却没有。

示例代码

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...
}
}

sink 工作正常,只是 UI 部分没有得到更新。也许我更新发布者的方式有误?

最佳答案

你的主视图

 ChildView(items: $model.items)

你的 subview

struct ChildView: View {
@Binding let items: [Items]
var body: some View {
List {
ForEach(self.items) { item in
NephewView(items: item)
}
}
}
}

你的侄 subview

struct NephewView: View {
@Binding let items: item

var body: some View {
// Your view logic goes here with single item
}
}

关于iOS SwiftUI : Data Flow Flow in Subviews @ObservedObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58353161/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com