我正在尝试使用NavigationLink生成ForEach,并使用State和Binding传递一些实体:
struct ContentView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(
entity: MyEntity.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: \MyEntity.name, ascending: true)
]
) var entries: FetchedResults<MyEntity>
var body: some View {
NavigationView {
List {
ForEach(entries, id: \.self) { (entry: MyEntity) in
NavigationLink(destination: DetailView(myEntry: $entry)) {
Text(entry.name!)
}
}.
}
}
}
}
然后是以下视图:
struct DetailView: View {
@Binding var myEntry: MyEntity
var body: some View {
Text(myEntry.name!)
}
}
问题是由于出现错误,我无法将值传递给“详细信息”视图:
Use of unresolved identifier '$entry'
这里有什么问题以及如何解决?
如果我只有一个简单的@State
,则可以通过绑定传递它,但是我想/需要在ForEach中将其用于FetchedResults
编辑:如果我删除$
,我会得到Cannot convert value of type 'MyEntity' to expected argument type 'Binding<MyEntity>'
EDIT2:目的是将一些对象传递给DetailView,然后再将其传递回ContentView
答案 0 :(得分:1)
在ForEach
ForEach(entries, id: \.self) { entry in
NavigationLink(destination: DetailView(myEntry: entry)) {
Text(entry.name!)
}
}
以及DetailView
struct DetailView: View {
var myEntry: MyEntity
var body: some View {
Text(myEntry.name!)
}
}
MyEntity
是类,因此您通过引用传递对象,并在DetailView
中对其进行更改,您将更改同一对象。
答案 1 :(得分:1)
FetchedResults<MyEntity> entities
不符合Binding
或DynamicProperty
。要使$
符号要锻炼,必须符合Binding
。
您可以在FetchedResultsController
中创建一个ObservableObject
,以获得与@FetchRequest
相同的功能,并能够在EnvironmentObject
或{{1 }}。