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