关闭屏幕后列表未更新
List is not updating after dismissing the screen
这是我当前的代码
Content.swift
struct ContentView: View {
var taskStore : TaskStore
@State var modalIsPresented = false
var body: some View {
NavigationView {
List(taskStore.tasks){ task in
Text(task.name)
}.navigationTitle("Tasks")
.navigationBarItems(trailing: Button(action: {
self.modalIsPresented = true
}) {
Image(systemName: "plus")
})
}.sheet(isPresented: $modalIsPresented){
NewTaskView(taskStore: self.taskStore)
}
}
}
TaskStore.swift
class TaskStore {
var tasks = [
"Code The App",
"Book an escape room",
].map{ Task(name: [=11=])}
}
newTask.swift
struct NewTaskView: View {
var taskStore : TaskStore
@State var text = ""
@Environment (\.presentationMode) var presentationMode
var body: some View {
Form{
TextField("Task Name", text: $text)
Button("Add"){
self.taskStore.tasks.append(
Task(name: self.text)
)
print(taskStore.tasks)
self.presentationMode.wrappedValue.dismiss()
}.disabled(text.isEmpty)
}
}
}
然而,当我关闭列表时,列表没有得到更新,但是当我打印值时,它 taskStore.name 得到更新
不确定是什么问题
要观察 TaskStore 任务的变化,请遵循 class 到 ObservableObject 协议,如下所示:
class TaskStore : ObservableObject{
@Published var tasks = [
"Code The App",
"Book an escape room",
] .map{ Task(id: [=10=], name: [=10=])}
}
并更新 ContentView 中 taskStore 的声明如下:
struct ContentView: View {
@ObservedObject var taskStore : TaskStore
要了解有关 Observables 的更多信息,您可以参考:https://medium.com/cleansoftware/what-is-the-observableobject-protocol-in-swifts-combine-b6ad3102ccd4
这是我当前的代码
Content.swift
struct ContentView: View {
var taskStore : TaskStore
@State var modalIsPresented = false
var body: some View {
NavigationView {
List(taskStore.tasks){ task in
Text(task.name)
}.navigationTitle("Tasks")
.navigationBarItems(trailing: Button(action: {
self.modalIsPresented = true
}) {
Image(systemName: "plus")
})
}.sheet(isPresented: $modalIsPresented){
NewTaskView(taskStore: self.taskStore)
}
}
}
TaskStore.swift
class TaskStore {
var tasks = [
"Code The App",
"Book an escape room",
].map{ Task(name: [=11=])}
}
newTask.swift
struct NewTaskView: View {
var taskStore : TaskStore
@State var text = ""
@Environment (\.presentationMode) var presentationMode
var body: some View {
Form{
TextField("Task Name", text: $text)
Button("Add"){
self.taskStore.tasks.append(
Task(name: self.text)
)
print(taskStore.tasks)
self.presentationMode.wrappedValue.dismiss()
}.disabled(text.isEmpty)
}
}
}
然而,当我关闭列表时,列表没有得到更新,但是当我打印值时,它 taskStore.name 得到更新
不确定是什么问题
要观察 TaskStore 任务的变化,请遵循 class 到 ObservableObject 协议,如下所示:
class TaskStore : ObservableObject{
@Published var tasks = [
"Code The App",
"Book an escape room",
] .map{ Task(id: [=10=], name: [=10=])}
}
并更新 ContentView 中 taskStore 的声明如下:
struct ContentView: View {
@ObservedObject var taskStore : TaskStore
要了解有关 Observables 的更多信息,您可以参考:https://medium.com/cleansoftware/what-is-the-observableobject-protocol-in-swifts-combine-b6ad3102ccd4