如何在SwiftUI的列表中删除节中的项目

时间:2020-06-26 17:00:09

标签: swift swiftui

我正在尝试删除列表中“节”中的一项。但目前它不会删除我不想删除的项目/行。

我的部分之一:

Section(header: Text("Upcoming")) {
    ForEach(birthdays.filter {
        $0.date!.day <= Date().day && $0.date!.month > Date().month
            ||
            $0.date!.day > Date().day && $0.date!.month > Date().month
            ||
            $0.date!.day > Date().day && $0.date!.month == Date().month
    }, id: \.self) { birthday in
        BirthdayView(birthday: birthday)
            .onAppear {
                birthdayNotification(for: birthday)
            }
    }
    .onDelete(perform: deleteBirthdays)
}

我的删除功能:

func deleteBirthdays(at offsets: IndexSet) {
    for offset in offsets {
        let birthday = birthdays[offset]

        // delete it from the context
        moc.delete(birthday)
    }

    // save the context
    try? moc.save()
}

任何线索如何进行此操作?

1 个答案:

答案 0 :(得分:0)

发生此问题是因为您从已过滤的生日中获得了补偿,并尝试在未过滤的生日中删除。

代替:

ForEach(birthdays.filter { ... }

为过滤后的生日创建一个变量(可以是let@State等,具体取决于您的用例):

let filteredBirthdays = birthdays.filter { ... }

并在循环中同时使用它们:

ForEach(filteredBirthdays ...

以及删除方法:

let birthday = filteredBirthdays[offset]