【发布时间】:2020-02-23 10:49:22
【问题描述】:
我正在尝试使用 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
【问题讨论】:
-
检查 ForEach 在初始化闭包中提供的条目类型。 MyEntity 类型是否通过其 projectionValue 属性提供了绑定?这就是入口前面的 $ 的含义。
-
我听不懂。 MyEntity 是一个 CoreData 元素
-
如果我删除 $ 我得到:无法将类型“MyEntity”的值转换为预期的参数类型“Binding
” -
那是因为您将其定义为 DetailView 的参数。但 MyEntity 不是 Binding
。与 $entity 编译器抱怨,因为它不存在。 $ 是 projectionValue 的快捷方式,请参阅属性包装器定义 -
所以我需要做的,因为我不仅在 DetailView 中需要它,而且我还需要稍后传递给 ContentView
标签: ios swift binding swiftui property-wrapper