J'essaie de vérifier si les notifications utilisateur sont activées et sinon je veux lancer une alerte. J'ai donc une fonction checkAvailability
qui vérifie plusieurs choses, y compris le statut d'autorisation UserNotification.Attendez que le gestionnaire d'achèvement se termine - Swift
func checkAvailabilty() -> Bool {
//
// other checking
//
var isNotificationsEnabled = false
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound], completionHandler: { (granted, error) in
if granted {
isNotificationsEnabled = true
}
else {
isNotificationsEnabled = false
}
})
}
if isNotificationsEnabled {
return true
}
else {
// Throw alert: Remind user to activate notifications
return false
}
}
Mais le gestionnaire d'achèvement est appelé trop tard. La fonction a déjà renvoyé false
et après que le code dans la colsure s'exécute.
J'ai essayé de mettre l'instruction entière UNUserNotificationCenter.current().requestAuthorization()
dans une file d'attente de répartition synchrone, mais cela n'a pas fonctionné.
Une autre approche serait de revenir de l'intérieur de la fermeture, mais je ne sais pas comment y parvenir.
ajouter un gestionnaire d'exécution en tant que paramètre à 'checkAvailabilty()' et appellent à la fin du gestionnaire d'achèvement de requestAuthorization. – shallowThought