在 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