将带有completionHandler 的函数转换为Combine

Bjo*_*aye 1 swift combine

我试图将我的函数从使用完成处理程序更改为使用组合的函数,但我收到一条错误消息。

  1. 使用完成处理程序:

     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)
  2. 使用组合:

     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 类型更改为错误类型

我在这里缺少什么?

LuL*_*aGa 5

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)