我有这个用于我的模型的简单代码:
import Foundation
class TaskListModel: ObservableObject
{
struct TodoItem: Identifiable
{
var id = UUID()
var title: String = ""
}
@Published var items: [TodoItem]?
//MARK: - intents
func addToList()
{
self.items!.append(TodoItem())
}
}
然后我在这个视图中使用它:
import SwiftUI
struct TasksListView: View {
@ObservedObject var model = TaskListModel()
var body: some View {
List {
Button("Add list", action: {
model.addToList()
})
ForEach(model.items!) { item in
TextField("Title", text: item.title)
}
.onMove { indexSet, offset in
model.items!.move(fromOffsets: indexSet, toOffset: offset)
}
.onDelete { indexSet in
model.items!.remove(atOffsets: indexSet)
}
}
}
}
struct TasksListView_Previews: PreviewProvider {
static var previews: some View {
TasksListView()
}
}
我似乎无法让这段代码工作起来,我怀疑items数组需要用@Binding属性包装器进行包装,但它已经用@Published进行了包装,所以这更令我困惑。任何帮助将不胜感激!
@StateObject
而不是@ObservedObject
。关于为什么,请阅读这里获取更多信息:https://developer.apple.com/documentation/swiftui/managing-model-data-in-your-app - CouchDeveloper