【发布时间】:2021-11-03 22:30:55
【问题描述】:
在我的 Swift 项目中,数据和触发数据变化的前端按钮被多层对象隔开。如何使前端视图反映删除了几层的更改?我想这是 Swift 开发中相当普遍的情况。
这是一个工作示例,视图和数据之间没有分隔层。
import Foundation
import SwiftUI
import OrderedCollections
class Test: ObservableObject {
@Published var array: [String] = []
var num: Int = 0
func add() {
array.append(String(num))
num += 1
}
}
struct testView: View {
@ObservedObject var test = Test()
var body: some View {
VStack {
Button(action: { test.add() }) {
Text("Add Item to Array")
}
Text("")
Text("Items")
Text(Array(test.array).description)
}
}
}
@main
struct app: App {
var body: some Scene {
WindowGroup {
testView()
}
}
}
这是一个“中间”类不起作用的示例。
class Test: ObservableObject {
@Published var array: [String] = []
var num: Int = 0
func add() {
array.append(String(num))
num += 1
}
}
class Middle: ObservableObject {
@ObservedObject var test: Test = Test()
}
struct testView: View {
@ObservedObject var m = Middle()
var body: some View {
VStack {
Button(action: { m.test.add() }) {
Text("Add Item to Array")
}
Text("")
Text("Items")
Text(Array(m.test.array).description)
}
}
}
@main
struct app: App {
var body: some Scene {
WindowGroup {
testView()
}
}
}
注意:使用其他代码,我似乎已经能够让我的视图更新远离前端的变化数据。我确信这是可能的——我正在寻找的是使这项工作的系统方法(我当前的方法只是将@ObservableObject、@Published 和@ObservedObject 添加到数据接触的所有内容中,直到它工作——或不工作' t)。
【问题讨论】:
标签: swift class observable