Я хочу просто получить список запланированных локальных уведомлений и заполнить список SwiftUI, используя forEach
. Я считаю, что это должно работать так, как я сделал ниже, но массив всегда пуст, поскольку кажется, что он используется до завершения цикла for. Я попробовал функцию getNotifications()
с обработчиком завершения, а также в качестве функции возврата, но оба способа все равно не работали. Как я могу дождаться завершения цикла for для заполнения моего списка? Или, если есть другой способ сделать это, пожалуйста, дайте мне знать, спасибо.
var notificationArray = [UNNotificationRequest]()
func getNotifications() {
print("getNotifications")
center.getPendingNotificationRequests(completionHandler: { requests in
for request in requests {
print(request.content.title)
notificationArray.append(request)
}
})
}
struct ListView: View {
var body: some View {
NavigationView {
List {
ForEach(notificationArray, id: \.content) { notification in
HStack {
VStack(alignment: .leading, spacing: 10) {
let notif = notification.content
Text(notif.title)
Text(notif.subtitle)
.opacity(0.5)
}
}
}
}
.onAppear() {
getNotifications()
}
}
}
Обновлять:
Вот как я добавляю новое уведомление и снова вызываю getNotifications
. Я хочу, чтобы список динамически обновлялся по мере создания нового массива. Печать в консоль показывает, что getNotifications
работает правильно, а новый массив содержит добавленное уведомление.
Section {
Button(action: {
print("Adding Notification: ", title, bodyText, timeIntValue[previewIndex])
addNotification(title: title, bodyText: bodyText, timeInt: timeIntValue[previewIndex])
showDetail = false
self.vm.getNotifications()
}) {
Text("Save Notification")
}
}.disabled(title.isEmpty || bodyText.isEmpty)