使用 ReactiveCocoa 获取 "use of undeclared type 'NoError'"

Getting "use of undeclared type 'NoError'" with ReactiveCocoa

我正在尝试学习 ReactiveCocoa 并且很难开始。 API 我一直遇到小问题,而且教程似乎很快就过时了。可能是我印象不对。

只是想跟this我好像没有NoError.

它应该被正确导入,因为我可以访问 Signalrac_textSignal 等,但我不知道为什么 NoError 不可用。

他们的documentation mentions NoError as well but that leads to a 404.

这个transition to RAC4也提到了NoError。为什么 NoError 未声明?我正在使用 ReactiveCocoa 4.0.1.

编辑:我刚刚将 public enum NoError : ErrorType {} 添加到文件的顶部,现在可以使用了。我不确定这是否是解决问题的正确方法。指南和教程中没有提到我应该自己扩展 ErrorType

反应式 cocoa 原生 NoError 在 4.0.1 中被移除,取而代之的是 antitypicals implementation in Result (adds NoError to Result, see this)。参见例如问题 #2704

我们可以在源文件中看到它的明确使用,例如

因此,您可能需要在打算使用 NoError 时包含(反典型)Result。问题线程中的一项建议修复是

public typealias NoError = Result.NoError

如果您将 "import Results" 添加到 class 上方的页面顶部,NoError 将不再是未声明的类型!

如果您现在使用 ReactiveSwift 6.0 看到这个,他们删除了对 Result 的依赖,从而删除了 NoError

根据他们的 release notes here,解决方案是现在使用 Never

  • If you have used Result only as dependency of ReactiveSwift, remove all instances of import Result, import enum Result.NoError or import struct Result.AnyError and remove the Result Framework from your project.
  • Replace all cases where NoError was used in a Signal or SignalProducer with Never

以下示例代码显示了现在的样子:

import ReactiveSwift

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