Как изменить тип ошибки с Никогда на Ошибка в Комбинате? - PullRequest
0 голосов
/ 15 марта 2020
notificationCenterPublisher = NotificationCenter.default
            .publisher(for: .NSManagedObjectContextObjectsDidChange, object: context)
            .map { (notification) -> (CoreDataContextObserverState) in
                self.handleContextObjectDidChangeNotification(notification: notification)
            }
            .eraseToAnyPublisher()

У меня есть метод handleContextObjectDidChangeNotification, выполняющий сопоставление.

В данный моментtificationCenterPublisher имеет тип AnyPublisher<CoreDataContextObserverState, Never>

Но я хочу, чтобы он был AnyPublisher<CoreDataContextObserverState, Error>, а handleContextObjectDidChangeNotification имел некоторые способ указания ошибки произошел.

Как мне это сделать?

1 Ответ

1 голос
/ 15 марта 2020

Вы всегда можете изменить тип ошибки Publisher, используя setFailureType(to:), когда тип ошибки Never:

notificationCenterPublisher = NotificationCenter.default
    .publisher(for: .NSManagedObjectContextObjectsDidChange, object: context)
    .map { (notification) -> (CoreDataContextObserverState) in
        self.handleContextObjectDidChangeNotification(notification: notification)
    }
    .setFailureType(to: Error.self) <------------------- add this
    .eraseToAnyPublisher()

Вы можете разрешить handle метод выдает ошибку и превращает ее в ошибку издателя, используя tryMap:

notificationCenterPublisher = NotificationCenter.default
    .publisher(for: .NSManagedObjectContextObjectsDidChange, object: context)
    .tryMap { try self.handleContextObjectDidChangeNotification($0) }
  // ^^^^^^   ^^^
    .eraseToAnyPublisher()

Это также изменит тип ошибки издателя на Error.

...