在 SwiftUI 范围内找不到“实体”

Posted

技术标签:

【中文标题】在 SwiftUI 范围内找不到“实体”【英文标题】:Cannot find 'entity' in scope SwiftUI 【发布时间】:2021-07-17 07:55:06 【问题描述】:

我正在尝试将列表中的项目的详细信息显示到工作表上。我收到此错误Cannot find 'entity' in scope,即使它已在详细项结构中声明。

如果工作表在列表内,则不会出现此错误,但这会导致仅显示第一个项目的详细信息,即使您选择了第一个项目下方的任何其他项目。

这是一个 macOS 应用程序。

                @StateObject var vm = CoreDataViewModel()

                  List 
                    ForEach(vm.savedEntites)  entity in
                        Text(entity.name ?? "No Name")
                            .font(.system(size: 25))
                        HStack 
                        Button(action: vm.deleteMemory(entity: entity)) 
                                       Label("Delete",systemImage: "trash")
       
                                     .foregroundColor(Color(.red))
                     
                            Button(action: showingDetailScreen.toggle()) 
                            Label("Details", systemImage: "pencil")
                                     .foregroundColor(Color(.red))                       
                                                  
                    // list ends here                
                    .sheet(isPresented: $showingDetailScreen) 
                        DetailItemView(entity: entity,isVisible: self.$showingDetailScreen)
                           
                
            

详细项目视图结构

struct DetailItemView: View  
        var entity: MemoryEntity
        @Environment(\.presentationMode) var presentationMode
        @Binding var isVisible: Bool
        
 
        var body: some View 
            Text(entity.name ?? "No Name")
            HStack 
            Button("Exit") 
                self.isVisible = false
                   
            
            .frame(width: 300, height: 150)
            
    

视图模型

class CoreDataViewModel: ObservableObject 
    let container: NSPersistentContainer
    @Published var savedEntites: [MemoryEntity] = []
    @Published var selectedEntity: String = ""
    init() 
        container = NSPersistentContainer(name: "MemoryContainer")
        container.loadPersistentStores  (description, error) in
            if let error = error 
              print("Error loading CoreData. \(error)")
        
        
        FetchMemories()
    
    
    func FetchMemories() 
        let request = NSFetchRequest<MemoryEntity>(entityName: "MemoryEntity")
        do 
        savedEntites = try container.viewContext.fetch(request)
         catch let error 
            print("Error fetching \(error)")
        
       
   
    

【问题讨论】:

【参考方案1】:

实体的范围在 ForEach 括号内,

ForEach(vm.savedEntites)  entity in
                                                                                
 //End scope entity var

如果您想在 ForEach 之外显示礼物,建议您在 viewModel 中将 selectedEntity 声明为 @Published

List 
   ForEach(vm.savedEntites)  entity in
   Button(action: 
       vm.selectedEntity = entity
       showingDetailScreen.toggle()
   ) 

.sheet(isPresented: $showingDetailScreen) 
   DetailItemView(entity: vm.selectedEntity,isVisible: self.$showingDetailScreen)

【讨论】:

感谢您的回复。我应该如何在视图模型中声明“selectedEntity”?我试过作为一个字符串,我得到。无法将类型“MemoryEntity”的值分配给类型“字符串”错误。我已经用模型更新了问题。 @Published var selectedEntity: MemoryEntity?

以上是关于在 SwiftUI 范围内找不到“实体”的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI NavigationLink 在范围内找不到“json”

在范围内找不到 UIDocumentPickerViewController

在范围内找不到“ContentView”[关闭]

在范围内找不到“LocationsData”

Xcode ViewController 显示在范围内找不到“支付”

在范围内找不到类型“ListenerRegistration”