使用 UNNotificationRequest returns 计算 属性 无法将 'Void' 类型的 return 表达式转换为 return 类型“[UNNotificationRequest]”
Computed property with UNNotificationRequest returns Cannot convert return expression of type 'Void' to return type '[UNNotificationRequest]'
我有一个处理本地通知的 class,我想根据是否安排了通知来确定它们是否启用。所以我想我可以尝试创建一个计算的 属性,其中包含所有计划通知的数组,但我认为有些事情我不明白,因为我收到以下错误:
Cannot convert return expression of type 'Void' to return type '[UNNotificationRequest]'
var notifications: [UNNotificationRequest] {
center.getPendingNotificationRequests { notifications in return notifications }
}
简单地从完成处理程序中打印通知工作正常,所以我能够正确地获取它们,只是不将它们分配给变量。
我也尝试创建一个单独的变量并返回它,但这始终默认为我提供的空默认值。
var notifications: [UNNotificationRequest] {
var retrievedNotifications: [UNNotificationRequest]?
center.getPendingNotificationRequests { notifications in retrievedNotifications = notifications }
return retrievedNotifications ?? []
}
如有任何提示或指点,我们将不胜感激。
您或许可以像下面这样使用调度组。您实际上正在做的是等待从线程中检索所有通知,然后继续
var notifications: [UNNotificationRequest] {
var retrievedNotifications: [UNNotificationRequest] = []
let group = DispatchGroup()
group.enter()
// avoid deadlocks by not using .main queue here
DispatchQueue.global(attributes: .qosDefault).async {
center.getPendingNotificationRequests { notifications in
retrievedNotifications = notifications
group.leave()
}
}
// wait ...
group.wait()
return retrievedNotifications
}
我有一个处理本地通知的 class,我想根据是否安排了通知来确定它们是否启用。所以我想我可以尝试创建一个计算的 属性,其中包含所有计划通知的数组,但我认为有些事情我不明白,因为我收到以下错误:
Cannot convert return expression of type 'Void' to return type '[UNNotificationRequest]'
var notifications: [UNNotificationRequest] {
center.getPendingNotificationRequests { notifications in return notifications }
}
简单地从完成处理程序中打印通知工作正常,所以我能够正确地获取它们,只是不将它们分配给变量。
我也尝试创建一个单独的变量并返回它,但这始终默认为我提供的空默认值。
var notifications: [UNNotificationRequest] {
var retrievedNotifications: [UNNotificationRequest]?
center.getPendingNotificationRequests { notifications in retrievedNotifications = notifications }
return retrievedNotifications ?? []
}
如有任何提示或指点,我们将不胜感激。
您或许可以像下面这样使用调度组。您实际上正在做的是等待从线程中检索所有通知,然后继续
var notifications: [UNNotificationRequest] {
var retrievedNotifications: [UNNotificationRequest] = []
let group = DispatchGroup()
group.enter()
// avoid deadlocks by not using .main queue here
DispatchQueue.global(attributes: .qosDefault).async {
center.getPendingNotificationRequests { notifications in
retrievedNotifications = notifications
group.leave()
}
}
// wait ...
group.wait()
return retrievedNotifications
}