我正在创建一个视图模型,我将从数据库中检索到的数据放入其中。
检索数据后,我将其映射并创建一个包装器类型的数组。
以下是我的视图模型
class FoldersVM : ObservableObject {
let manager = PersistenceController()
@Published var folders: [FolderWrapper] = []
func retrieveFolders() {
folders = manager.retrieveFolders().map(FolderWrapper.init)
}
}
文件夹包装如下:
struct FolderWrapper: Hashable {
var folder: Folder
var name: String {
return folder.name ?? "error"
}
var index: Int {
return folder.index
}
}
现在,我想向 FolderWrapper 添加一个“isSelected”变量,并且我希望能够通过在我的视图中执行 isSelected.toggle() 来修改它。
我在视图中所做的如下:
struct FolderView1: View {
var folders: [FolderWrapper]
var body: some View {
LazyVGrid(columns: [GridItem(.adaptive(minimum: 10))]) {
ForEach(folders, id: \.self) { folder in
fw(folder: folder)
}
}
}
func fw(folder: FolderWrapper) -> some View{
Image(systemName: "folder")
.onTapGesture {
//Here I want to select but if I do i get an error saying that folder is immutable
}
}
}
那么如何创建 isSelected 变量并使其在视图中也发生变化?
我试着让它绑定,但后来我收到一条错误消息,说该结构不符合可散列和可等化。如果我创建一个变异方法来改变变量然后它说我不能在不可变元素(文件夹)上调用变异函数