Swift 如何使用CoreData传递子实体的DetailView参数?

Swift 如何使用CoreData传递子实体的DetailView参数?,swift,core-data,swiftui,entity,Swift,Core Data,Swiftui,Entity,我很确定这是一个非常基本的问题,但我想不出来 在我的详细视图中,我使用ObservedObject为每个子实体定义变量,并显示它们。它起作用了 最后,它要求我为每个观察对象传递一个变量。对于父实体,我传递在ForEach中定义的变量。对于子实体,我尝试了以下方法: 为每个子实体创建单独的FetchRequests,并尝试传递变量 尝试了ForEach(zip(sequence1,sequence2,id:\0.self)){seq1,seq2 in 尝试了上面的一个,没有zip,只有父实体 获取

我很确定这是一个非常基本的问题,但我想不出来

在我的详细视图中,我使用ObservedObject为每个子实体定义变量,并显示它们。它起作用了

最后,它要求我为每个
观察对象传递一个变量。对于父实体,我传递在
ForEach
中定义的变量。对于子实体,我尝试了以下方法:

为每个子实体创建单独的FetchRequests,并尝试传递变量 尝试了
ForEach(zip(sequence1,sequence2,id:\0.self)){seq1,seq2 in
尝试了上面的一个,没有zip,只有父实体

获取此错误:

编译器无法在合理的时间内对此表达式进行类型检查;请尝试将该表达式拆分为不同的子表达式

以下是完整的代码片段。它适用于字典类型的应用程序:

列表{
ForEach(zip(words,wordClass,example,exampletransation),id:\.self){word,wordClass,exampletransation in
导航链接(目的地:WordDetailView(word:word,wordClass:wordClass,example:example,ExampleTransation:ExampleTransation)){
VStack{
HStack{
垫片()
文本(字.音译)
文本(word.word)
}
}
}
}
.onDelete(执行:删除项)
}
获取请求:

@Environment(\.managedObjectContext)私有变量viewContext
@获取请求(
sortDescriptors:[NSSortDescriptor(键路径:\Word.Word,
是的,
动画:。默认设置)
私有变量字:FetchedResults
@获取请求(
sortDescriptors:[NSSortDescriptor(关键字路径:\WordClass.WordClass,
是的,
动画:。默认设置)
私有变量wordClass:FetchedResults
@获取请求(
sortDescriptors:[NSSortDescriptor(键路径:\Examples.example,
是的,
动画:。默认设置)
私有变量示例:FetchedResults
@获取请求(
sortDescriptors:[NSSortDescriptor(密钥路径:\exampletransation.en,
是的,
动画:。默认设置)
私有变量示例转换:FetchedResults

尝试将其包装为数组,传递单词object以进行标识,然后访问如下元素

ForEach(Array(zip(words, wordClass)), id: \.0) { element in
    //access via element.0
编辑:如果所有数组的大小相同,则对两个元素使用zip,并通过索引访问另一个元素。如果是这样,则不确定

struct ContentView: View {
    
    var words = ["Test"]
    var wordClass = ["Test2"]
    var example = ["Test3"]
    var exampleTranslation = ["Test4"]

    var body: some View {
        ForEach(Array(zip(words, wordClass).enumerated()), id: \.0) { index, element in
            Text("\(element.0) + \(element.1) + \(example[index]) + \(exampleTranslation[index])")

            //<< Access first two elements via element tuple and other via index
        }
    }
}
struct ContentView:View{
var words=[“测试”]
var wordClass=[“Test2”]
变量示例=[“Test3”]
var exampletransformation=[“Test4”]
var body:一些观点{
ForEach(数组(zip(words,wordClass).enumerated()),id:\.0){index,中的元素
文本(“\(element.0)+\(element.1)+\(示例[index])+\(示例翻译[index])”)

//谢谢你的回复。我在
ForEach
行中发现两个错误:
Type'()->()'不能符合'View';只有struct/enum/class类型可以符合协议
调用中位置#3、#4处的额外参数
。您是对的……不幸的是,zip最多只占用两个数组。有些库支持更多。但是,如果数组长度相等,您也可以尝试通过索引访问另一个数组上面的代码现在应该可以使用了,但是只有两个元素可以使用。我给你一个索引更新。谢谢,我会看看我能做些什么。我已经更新了上面的代码。它可以使用。使用元组访问前两个,使用索引访问另一个。数组的大小是否相同?那么应该可以使用了