如何获取通知权限状态(Swift)?

How to get notification permission status (Swift)?

我有这个功能,但出于某种原因,它会抛出一个错误。

可能是什么问题?

func notificationStatus() -> Bool {
    let center = UNUserNotificationCenter.current()
    center.getNotificationSettings { (settings) in
        if(settings.authorizationStatus == .authorized) {
            return true
        }
    }
    return false
}

这是错误:“无效函数中的意外非无效 return 值”

正如 Leo 在他的评论中所说,您不能 return 异步函数的结果。 (函数 UNUserNotificationCenter.current().center.getNotificationSettings() return 立即提示用户批准通知。一旦用户响应,getNotificationSettings 调用其完成处理程序。在该完成处理程序中,您需要调用 你的完成处理程序。)

您需要重写您的函数以获取完成处理程序。像这样:

func notificationStatus( completion: @escaping (Bool) -> Void) {
    let center = UNUserNotificationCenter.current()
    center.getNotificationSettings { (settings) in
        let authorized = settings.authorizationStatus == .authorized
        completion(authorized)
    } 
}

然后这样称呼它:

notificationStatus(completion: { authorized in
       print("authorized = \(authorized)")
   }
)

或者,使用 trailing closure syntax:

notificationStatus() { authorized in
   print("authorized = \(authorized)")
}

请注意,正如下面 Leo Dabus 所指出的,您可以在使用尾随闭包语法时跳过函数调用中的括号:

notificationStatus { authorized in
   print("authorized = \(authorized)")
}