swift - 无法访问财产
问题描述
我想SubjectView
在MainView
.
intopics
上的物业不可进入。subject
SubjectView
我该怎么办?谢谢。
更新:
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")
}
}
}
: 处的错误为SubjectView
:var body: some View
Failed to produce diagnostic for expression; please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the project
解决方案
的集合类型ForEach
必须符合RandomAccessCollection
. topics
不是因为它是一个(NS)Set
.
一个简单的解决方案是sort
将Set
which 变为Array
. 或者显式创建一个数组,该行假定它topics
是一个原生 SwiftSet<Topic>
Array(subject.topics)
注意:请勿随意使用\.self
。确定一个唯一的属性和/或采用Identifiable
. 例如,您可以使用唯一NSManagedObjectID
的实例。NSManagedObject
推荐阅读
- javascript - 在附加的 td 上获得 x-editable
- c# - C# WebApi 登录验证
- netlogo - 如何使用两条相交线的概念在 Netlogo 中实现避障(龟头与由补丁组成的墙)
- vue.js - 组件错误地从其他组件输出内容
- blazor - 如何知道 EventCallback 何时被触发?
- openssl - LibreSSL 为 aes-256-gcm 提供身份验证标签
- django - docker容器中的cronjob无法连接到其他容器
- datetime - Hive:在“yyyy-MM-dd'T'HH:mm:ss.SSS'Z'”中转换缺少秒数的字符串日期时间
- java - 如何从数据库中获取数据?
- r - 使用 as 将整数转换为数字