我试图将我的函数从使用完成处理程序更改为使用组合的函数,但我收到一条错误消息。
使用完成处理程序:
typealias AuthorizationCompletion = (UNAuthorizationStatus) -> ()
func reloadAuthorizationStatus(completion: @escaping AuthorizationCompletion) {
UNUserNotificationCenter.current().getNotificationSettings { settings in
DispatchQueue.main.async {
let notificationStatus = settings.authorizationStatus
completion(notificationStatus)
}
}
Run Code Online (Sandbox Code Playgroud)
使用组合:
func reloadAuthorizationStatus() -> AnyPublisher<UNAuthorizationStatus, Error> {
UNUserNotificationCenter.current().getNotificationSettings { settings in
Just(settings)
.tryMap({$0.authorizationStatus})
.eraseToAnyPublisher()
}
Run Code Online (Sandbox Code Playgroud)
但出现错误无法将类型“Void”的返回表达式转换为返回类型“AnyPublisher<UNAuthorizationStatus, Error>”
从我将返回类型添加到函数的那一刻起,设置 let 将从 UNNotificationSettings 类型更改为错误类型
我在这里缺少什么?
Future是您需要的发布商
func reloadAuthorizationStatus() -> AnyPublisher<UNAuthorizationStatus, Never> {
Future<UNAuthorizationStatus, Never> { promise in
UNUserNotificationCenter.current()
.getNotificationSettings { settings in
promise(.success(settings.authorizationStatus))
}
}
.eraseToAnyPublisher()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1585 次 |
| 最近记录: |