ForEach NavigationLink 与状态和绑定
ForEach NavigationLink with State and Binding
我正在尝试使用 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
通过绑定传递它没问题,但我 want/need 在 ForEach 中为 FetchedResults
编辑:如果我删除 $
我得到 Cannot convert value of type 'MyEntity' to expected argument type 'Binding<MyEntity>'
EDIT2:目的是将一些对象传递给 DetailView,然后再传递回 ContentView
在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
是 class,因此您通过引用传递对象并在 DetailView
中更改它,您更改了相同的对象。
FetchedResults<MyEntity> entities
不符合Binding
或DynamicProperty
。 $
符号要锻炼必须符合Binding
.
您可以在 ObservableObject
中创建 FetchedResultsController
以获得与 @FetchRequest
相同的功能,并且能够传递 EnvironmentObject
或 ObservedObject
.
我正在尝试使用 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
通过绑定传递它没问题,但我 want/need 在 ForEach 中为 FetchedResults
编辑:如果我删除 $
我得到 Cannot convert value of type 'MyEntity' to expected argument type 'Binding<MyEntity>'
EDIT2:目的是将一些对象传递给 DetailView,然后再传递回 ContentView
在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
是 class,因此您通过引用传递对象并在 DetailView
中更改它,您更改了相同的对象。
FetchedResults<MyEntity> entities
不符合Binding
或DynamicProperty
。 $
符号要锻炼必须符合Binding
.
您可以在 ObservableObject
中创建 FetchedResultsController
以获得与 @FetchRequest
相同的功能,并且能够传递 EnvironmentObject
或 ObservedObject
.