'() -> BindingTarget <Error>' не конвертируется в '(Bool) -> BindingTarget <Error>' - PullRequest
0 голосов
/ 06 января 2020

Я недавно унаследовал проект iOS, написанный с использованием ReactiveSwift 3.1.0 и ReactiveCocoa 7.2.0. Мне поручено обновить его до Swift 5 и последних версий ReactiveSwift.

Я обновил ReactiveSwift до 6.1.0 и ReactiveCocoa до 10.1.0. Я не очень хорошо разбираюсь в программировании Reactive, но мне удалось преобразовать значительную часть существующей кодовой базы в последние версии.

Однако я застрял в этой конкретной части. Оригинальный программатор больше не доступен.

В этом проекте на контроллере представления есть расширение для отображения сообщений об ошибках.

extension Reactive where Base: UIViewController {
    func presentError(animated: Bool = true) -> BindingTarget<Error> {
        return self.makeBindingTarget { $0.present(error: $1, animated: animated) }
    }

    func present(error: Error, animated: Bool = true, completion: (() -> Void)? = nil) {
        LogError("Presenting error: \(error.verboseDescription)")
        self.present(UIAlertController(error: error, completion: completion), animated: animated, completion: nil)
    }
}

В контроллере представления я получаю следующее ошибка в этой строке.

self.reactive.presentError() <~ self.viewModel.reportAction.errors.map { $0 }

'() -> BindingTarget' не конвертируется в '(Bool) -> BindingTarget'

Это соответствующая часть в модели представления.

private(set) var reportAction: Action<(User, ReportReason), Void, APIKit.Error>!

Единственное изменение, которое произошло здесь, это тип errors в viewModel.reportAction.errors.map { $0 }, измененный с public let errors: Signal<Error, NoError> на public let errors: Signal<Error, Never>. Это связано с некоторыми изменениями , внесенными в последний источник ReactiveSwift.

Это, по-видимому, нарушило этот фрагмент кода. Я не уверен, почему происходит ошибка и как исправить эту часть.

...