首页 > 解决方案 > 无法访问财产

问题描述

我想SubjectViewMainView.

intopics上的物业不可进入。subjectSubjectView

我该怎么办?谢谢。


更新

ForEach(subject.topics, id: \.self) { topic in
    Text(topic.title)
}

...可能是有问题的部分。


文件:SubjectView

import SwiftUI

struct SubjectView: View {
    @State var subject: Subject
    
    var body: some View {
        List {
            ForEach(subject.topics, id: \.self) { topic in
                Text(topic.title)
            }
        }
    }
}

文件MainView

import SwiftUI

struct MainView: View {
    @Environment(\.managedObjectContext) var managedObjectContext
    
    @FetchRequest(entity: Subject.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Subject.name, ascending: true)]) var subjects: FetchedResults<Subject>
    
    @State var subjectName: String = ""
    
    var body: some View {
        NavigationView {
            Form {
                List {
                    ForEach(subjects, id: \.self) { subject in
                        NavigationLink(
                            destination: SubjectView(subject: subject),
                            label: {
                                Text(subject.name ?? "-")
                            })
                    }
                }
            }
            .navigationTitle("Schulfächer")
        }
    }
}

主题实体的屏幕截图

: 处的错误为SubjectViewvar body: some View

Failed to produce diagnostic for expression; please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the project

标签: swiftcore-dataswiftui

解决方案


的集合类型ForEach必须符合RandomAccessCollection. topics不是因为它是一个(NS)Set.

一个简单的解决方案是sortSetwhich 变为Array. 或者显式创建一个数组,该行假定它topics是一个原生 SwiftSet<Topic>

Array(subject.topics)

注意:请勿随意使用\.self。确定一个唯一的属性和/或采用Identifiable. 例如,您可以使用唯一NSManagedObjectID的实例。NSManagedObject


推荐阅读