在SwiftUI中为树结构更新UI

本·雅各布

我有一个ObservableObject类,Model0其中有一个Publishedobject nestednested对象表示递归树结构。我希望能够更新树结构并适当更新UI。但是,在下面的代码中,当我更新nested对象的子对象时,UI不会更新,我假定是因为对的引用nested未更改。每当我更改nested树形结构中的任何对象时,如何更新UI

class Nested: Identifiable {
    var id: UUID = UUID()
    var name: String
    var children:[Nested]
    
    init(name: String, children:[Nested]) {
        self.children = children
        self.name = name
    }
}

class Model0 : ObservableObject {
    @Published var nested: Nested
    
    init(nested: Nested) {
        self.nested = nested
    }
    
    func update() {
        nested.children[0] = Nested(name:"New", children: [])
    }
}

struct NestedView: View {
    var nested: Nested
    
    var body: some View {
        VStack {
            Text(nested.name)
            
            ForEach(nested.children) { c in
                NestedView(nested: c)
            }
        }
    }
}


struct Test: View {
    @ObservedObject var model: Model0 = Model0(nested: Nested(name: "Parent" ,children: [Nested(name: "Child", children: [])]))
    
    var body: some View {
        VStack {
            Button(action: {
                self.model.update()
            }) {
             Text("Update")
            }
            NestedView(nested: model.nested)
        }
    }
}
他的脾气

如果决定创建引用类型的模型,则需要使所有模型都可观察,因此每个级别都可以更新相应的视图。并且,当然,每个级别模型都有单独的视图。

考虑到以上,这是一个解决方案。已通过Xcode 12 / iOS 14测试。

仅修改部分:

class Nested: ObservableObject, Identifiable {
    var id: UUID = UUID()
    @Published var name: String
    @Published var children:[Nested]

    init(name: String, children:[Nested]) {
        self.children = children
        self.name = name
    }
}

struct NestedView: View {
    @ObservedObject var nested: Nested

    var body: some View {
        VStack {
            Text(nested.name)

            ForEach(nested.children) { c in
                NestedView(nested: c)
            }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更新Clojure中的层次结构/树结构

来自分类Dev

ReactJS 将焦点设置为树结构中的输入

来自分类Dev

NERDTree不更新树结构

来自分类Dev

NERDTree不更新树结构

来自分类Dev

树结构中的递归和

来自分类Dev

邻接表中的树结构

来自分类Dev

Lisp中树结构的定义

来自分类Dev

不同表中的树结构

来自分类Dev

列出cakephp中的树结构

来自分类Dev

Lisp中树结构的定义

来自分类Dev

将数据加载为树结构

来自分类Dev

将树结构解析为If语句

来自分类Dev

在Swift中为简单的树结构实现递归生成器

来自分类Dev

在树结构.txt文件中搜索节点

来自分类Dev

在javascript中打印分层树结构

来自分类Dev

树结构中的读取访问冲突

来自分类Dev

如何在Antlr中禁用树结构?

来自分类Dev

使用缓存计算树结构中的总和

来自分类Dev

在树结构中存在无限深度的问题

来自分类Dev

如何使用JSON数据创建简单的UI树结构

来自分类Dev

如何使用JSON数据创建简单的UI树结构

来自分类Dev

Python递归将元组列表排序为树结构

来自分类Dev

C ++元编程为树结构分配唯一的ID

来自分类Dev

如何在python中将kml文件解析为树结构?

来自分类Dev

如何在Tabulator中过滤树结构中的子级?

来自分类Dev

在Scala Play框架中阅读JSON树结构

来自分类Dev

从PostgreSQL中的表中提取网络/树结构

来自分类Dev

在Neo4j中创建树结构

来自分类Dev

树结构和React / Redux中的shouldComponentUpdate的性能问题