Получение "использования необъявленного типа" NoError "с помощью ReactiveCocoa

Я пытаюсь изучить ReactiveCocoa и нелегко начать работу. Я продолжаю сталкиваться с незначительными ударами, поскольку API и учебники, кажется, устарели быстро. Возможно, у меня неправильное впечатление.

Просто пытаюсь выполнить this У меня, похоже, нет NoError.

введите описание изображения здесь

Он должен быть импортирован правильно, так как у меня есть доступ к Signal, rac_textSignal и т.д., но я не знаю, почему NoError недоступен.

Их documentation упоминает NoError, но это приводит к 404.

Этот переход к RAC4 упоминает NoError. Почему NoError необъявленный? Я использую ReactiveCocoa 4.0.1.

Изменить: я просто добавил public enum NoError : ErrorType {} в начало файла, и теперь он работает. Я не уверен, что это правильное решение проблемы. В руководствах и учебниках не упоминается, что я должен расширить ErrorType себя.

Ответ 1

Реактивный cocoa native NoError был удален в 4.0.1 в пользу antitypicals в Result (добавляет NoError до Result, см. this). См. выпуск № 2704

Мы можем видеть, что это явно используется в исходных файлах, например

Следовательно, вы, вероятно, должны включать (antitypicals) Result всякий раз, когда вы собираетесь использовать NoError. Одно из рекомендуемых исправлений в теме проблемы -

public typealias NoError = Result.NoError

Ответ 2

Если вы добавите "Импорт результатов" в начало страницы над вашим классом, NoError больше не будет незадекларированным типом!

Ответ 3

Если вы видите это сейчас с ReactiveSwift 6.0, они удалили зависимость от Result, которая удаляет NoError.

Согласно их примечаниям к выпуску, решение состоит в том, чтобы теперь использовать Never

  • Если вы использовали Result только как зависимость ReactiveSwift, удалите все экземпляры импорта Result, импортируйте enum Result.NoError или импортируйте struct Result.AnyError и удалите Result Framework из своего проекта.
  • Замените все случаи, когда NoError использовался в Signal или SignalProducer, с Never

Следующий пример кода показывает, как это должно выглядеть сейчас:

import ReactiveSwift

func example() -> SignalProducer<Void, Never> {
    return SignalProducer(value: ())
}