Ios 具有状态和绑定的ForEach NavigationLink
我正在尝试使用NavigationLink生成ForEach,并使用状态和绑定传递一些实体:Ios 具有状态和绑定的ForEach NavigationLink,ios,swift,binding,swiftui,property-wrapper,Ios,Swift,Binding,Swiftui,Property Wrapper,我正在尝试使用NavigationLink生成ForEach,并使用状态和绑定传递一些实体: struct ContentView: View { @Environment(\.managedObjectContext) var moc @FetchRequest( entity: MyEntity.entity(), sortDescriptors: [ NSSortDescriptor(keyPath: \MyEnti
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!)
}
}.
}
}
}
}
问题是我无法将值传递给详细信息视图,因为出现以下错误:
Use of unresolved identifier '$entry'
这里有什么问题,如何解决
如果我只有一个简单的@State
就可以通过绑定传递它,但是我想/需要在ForEach中为获取的结果使用它
编辑:如果我删除$
我得到无法将类型为“MyEntity”的值转换为预期的参数类型“Binding”
EDIT2:目的是将一些对象传递给DetailView,然后稍后再传递回ContentView
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
中更改它,您将更改相同的对象。获取的结果实体
不符合绑定
或动态属性
。对于要训练的$
符号,必须符合绑定
您可以在ObservedObject
中创建FetchedResultsController
,以获得与@FetchRequest
相同的功能,并能够在环境对象
或ObservedObject中传递值,检查ForEach在初始化闭包中提供的条目类型。MyEntity类型是否通过其projectedValue属性提供其绑定?这就是入口前的美元的意思。我不明白。MyEntity是CoreData元素如果我删除$I get:无法将类型为“MyEntity”的值转换为预期的参数类型“Binding”,这是因为您将其定义为DetailView的参数。但我的实体并不具有约束力。使用$entity编译器,因为它不存在。$是projectedValue的快捷方式,请参见属性包装器定义,所以我需要做的是,因为我不仅需要在DetailView中使用它,而且还需要稍后传递回ContentView
struct DetailView: View {
var myEntry: MyEntity
var body: some View {
Text(myEntry.name!)
}
}