CristianMoisei
CristianMoisei

Reputation: 2279

Computed property with UNNotificationRequest returns Cannot convert return expression of type 'Void' to return type '[UNNotificationRequest]'

I have a class that handles local notifications and I'd like to determine whether they are enabled or not based on whether any are scheduled. So I thought I could try creating a computed property that contains an array of all the notifications scheduled, but I think there's something I don't understand because I get the following error:

Cannot convert return expression of type 'Void' to return type '[UNNotificationRequest]'

var notifications: [UNNotificationRequest] {
    center.getPendingNotificationRequests { notifications in return notifications }
}

Simply printing the notifications from within the completion handler works fine, so I am able to get them correctly, just not assign them to the variable.

I also tried creating a separate variable and returning that, but this always defaults to the empty default value I provided.

var notifications: [UNNotificationRequest] {
    var retrievedNotifications: [UNNotificationRequest]?
    center.getPendingNotificationRequests { notifications in retrievedNotifications = notifications }
    return retrievedNotifications ?? []
}

Any tips or pointers would be appreciated.

Upvotes: 0

Views: 144

Answers (1)

Harsh
Harsh

Reputation: 2908

You can probably use dispatch groups like as follows. What you are actually doing is waiting for all your notifications to be retrieved from a thread and then continue



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
}

Upvotes: 1

Related Questions