使用 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
}