如何将变量添加到将包含来自 CoreData 的数据的结构

问题描述 投票:0回答:0

我正在创建一个视图模型,我将从数据库中检索到的数据放入其中。
检索数据后,我将其映射并创建一个包装器类型的数组。

以下是我的视图模型

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 变量并使其在视图中也发生变化?

我试着让它绑定,但后来我收到一条错误消息,说该结构不符合可散列和可等化。如果我创建一个变异方法来改变变量然后它说我不能在不可变元素(文件夹)上调用变异函数

swiftui struct viewmodel
© www.soinside.com 2019 - 2024. All rights reserved.