SwiftArray.append()方法在SwiftUI中不起作用



我很难在SwiftUI中进行简单的追加。这是我的代码:

// This is defined in my custom view
var newClass = Class()
// This is inside a List container (I hid the Button's content because it doesn't matter)
Button(action: {
self.newClass.students.append(Student())
print(self.newClass.students) // This prints an Array with only one Student() instance - the one defined in the struct's init
})
// These are the custom structs used
struct Class: Identifiable {
var id = UUID()
@State var name = ""
@State var students: [Student] = [Student()] // Right here
}
struct Student: Identifiable {
var id = UUID()
@State var name: String = ""
}

我认为这可能与新的@Struct有关,但我是iOS(和Swift(开发的新手,所以我不确定。

让我们稍微修改一下模型。。。

struct Class: Identifiable {
var id = UUID()
var name = ""
var students: [Student] = [Student()]
}
struct Student: Identifiable {
var id = UUID()
var name: String = ""
}

与其在非预期的地方使用@State(因为它被设计为在View中,而不是模型中(,不如将View model层引入

class ClassViewModel: ObservableObject {
@Published var newClass = Class()
}

现在我们可以声明与预期行为一致的相关视图

struct ClassView: View {
@ObservedObject var vm = ClassViewModel()
var body: some View {
Button("Add Student") {
self.vm.newClass.students.append(Student())
print(self.vm.newClass.students)
}
}
}

输出:

Test[4298:344875][Agent]收到显示消息[Test.Student(id:D1410829-F039-4D15-8440-69DEF0D55A26,姓名:"(,测试生(id:50D45CC7-8144-49CC-88BE-598C890F2D4D,名称:"(]

最新更新