CoreData 的可观察对象 - 'NSSet?' 类型的值没有下标
Observable Object to CoreData - Value of type 'NSSet?' has no subscripts
这是我的模型配置
class ModelsConfig: ObservableObject {
@Published var lists: [ListModel] = []
@Published var reminders: [Reminder] = []
}
那些是我的模特
struct ListModel: Hashable {
var color: String
var text: String
var reminders: [Reminder]
}
struct Reminder: Hashable {
var title: String
var notes: String
var date: Date
var index: Int
var list: ListModel
}
在 ModelsConfig 的帮助下,我能够像这样访问此视图中的索引之前
struct ListDetailView: View {
@Binding var selectedIndex: Int
@State var isSelected: Bool = false
@EnvironmentObject var config : ModelsConfig
ForEach(config.lists[selectedIndex].reminders.indices, id: \.self) { reminderIndex in
HStack {
Button(action: {
DispatchQueue.main.asyncAfter(deadline: .now() + 1){
deleteReminder(at: reminderIndex)
}
}, label: {
// ReminderCell(reminder: list.reminders[reminderIndex])
ReminderCell(reminder: config.lists[selectedIndex].reminders[reminderIndex])
})
}
.padding(.bottom)
}
现在,我正试图借助核心数据达到与此相同的指数
@FetchRequest(sortDescriptors: [])
var list: FetchedResults<CDListModel>
ForEach(list[selectedIndex].reminders.indices , id: \.self) { reminderIndex in
HStack {
Button(action: {
DispatchQueue.main.asyncAfter(deadline: .now() + 1){
deleteReminder(at: reminderIndex)
}
}, label: {
ReminderCell(reminder: list[selectedIndex].reminders[reminderIndex])
})
}
.padding(.bottom)
}
但是它不允许我这样做。如何访问核心数据中的索引?
在 Core Data 中,关系是 (NS)Set
。出于性能原因,它们是无序的。
最简单的解决方案是将集合转换为数组
ForEach((list[selectedIndex].reminders.allObjects as! [CDReminder]).indices , id: \.self) { reminderIndex in
考虑将关系声明为原生关系 Set<CDReminder>
。 Swift Set
s 是一个序列并得到索引。
这是我的模型配置
class ModelsConfig: ObservableObject {
@Published var lists: [ListModel] = []
@Published var reminders: [Reminder] = []
}
那些是我的模特
struct ListModel: Hashable {
var color: String
var text: String
var reminders: [Reminder]
}
struct Reminder: Hashable {
var title: String
var notes: String
var date: Date
var index: Int
var list: ListModel
}
在 ModelsConfig 的帮助下,我能够像这样访问此视图中的索引之前
struct ListDetailView: View {
@Binding var selectedIndex: Int
@State var isSelected: Bool = false
@EnvironmentObject var config : ModelsConfig
ForEach(config.lists[selectedIndex].reminders.indices, id: \.self) { reminderIndex in
HStack {
Button(action: {
DispatchQueue.main.asyncAfter(deadline: .now() + 1){
deleteReminder(at: reminderIndex)
}
}, label: {
// ReminderCell(reminder: list.reminders[reminderIndex])
ReminderCell(reminder: config.lists[selectedIndex].reminders[reminderIndex])
})
}
.padding(.bottom)
}
现在,我正试图借助核心数据达到与此相同的指数
@FetchRequest(sortDescriptors: [])
var list: FetchedResults<CDListModel>
ForEach(list[selectedIndex].reminders.indices , id: \.self) { reminderIndex in
HStack {
Button(action: {
DispatchQueue.main.asyncAfter(deadline: .now() + 1){
deleteReminder(at: reminderIndex)
}
}, label: {
ReminderCell(reminder: list[selectedIndex].reminders[reminderIndex])
})
}
.padding(.bottom)
}
但是它不允许我这样做。如何访问核心数据中的索引?
在 Core Data 中,关系是 (NS)Set
。出于性能原因,它们是无序的。
最简单的解决方案是将集合转换为数组
ForEach((list[selectedIndex].reminders.allObjects as! [CDReminder]).indices , id: \.self) { reminderIndex in
考虑将关系声明为原生关系 Set<CDReminder>
。 Swift Set
s 是一个序列并得到索引。