如何解决在SwiftUI中为树结构更新UI
我有一个ObservableObject类Model0
,它有一个Published
对象nested
。 nested
对象表示递归树结构。我希望能够更新树结构并适当更新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上进行了测试。
仅修改部分:
private void calculate_dtos(double x)
{
int start_index = (int)Math.Log(x,60);
double x_buffer = x;
List<int> q = new List<int>();
while (x_buffer!= 0.0000000)
{
int xx = (int)(x_buffer / Math.Pow(60,start_index));
q.Add(xx);
x_buffer -= xx * Math.Pow(60,start_index);
start_index--;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。