繁体   English   中英

带有状态和绑定的 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 ,通过绑定传递它没有问题,但我想/需要在 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是类,因此您可以通过引用传递对象并在DetailView更改它,从而更改相同的对象。

FetchedResults<MyEntity> entities不符合BindingDynamicProperty 要锻炼的$符号必须符合Binding

您可以在ObservableObject创建FetchedResultsController以获得与@FetchRequest相同的功能,并能够在EnvironmentObjectObservedObject传递值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM