如何获取通知权限状态(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)")
}
我有这个功能,但出于某种原因,它会抛出一个错误。
可能是什么问题?
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)")
}