Getting “use of undeclared type 'NoError'” with ReactiveCocoa

筅森魡賤 提交于 2020-01-01 02:39:11

问题


I am trying to learn ReactiveCocoa and have a hard time getting started. I keep hitting minor bumps as API and tutorials seems to be outdated quickly. Maybe I have the wrong impression.

Just trying to follow this I do not seem to have NoError.

It should be imported correctly, since I have access to Signal, rac_textSignal etc. but I don't know why NoError is not available.

Their documentation mentions NoError as well but that leads to a 404.

This transition to RAC4 mentions NoError as well. Why is NoError undeclared? I am using ReactiveCocoa 4.0.1.

Edit: I just added public enum NoError : ErrorType {} to the top of the file and it works now. I am not sure if this is a proper solution to the problem though. It is not mentioned in guides and tutorials that I should extend ErrorType myself.


回答1:


The reactive cocoa native NoError was removed in 4.0.1 in favour of antitypicals implementation in Result (adds NoError to Result, see this). See e.g. issue #2704

  • https://github.com/ReactiveCocoa/ReactiveCocoa/issues/2704

We can see this explicitly used in the source files, e.g.

  • import enum Result.NoError in Property.swift.

Hence, you probably need to include (antitypicals) Result whenever you intend to use NoError. One suggested fix in the issue thread is

public typealias NoError = Result.NoError



回答2:


If you add "import Results" to the top of the page above your class, NoError will no longer be an undeclared type!




回答3:


If you are seeing this now with ReactiveSwift 6.0, they removed the dependency on Result, which removes NoError.

Per their release notes here, the solution is to now use 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

The following example code shows how this should look now:

import ReactiveSwift

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


来源:https://stackoverflow.com/questions/35205550/getting-use-of-undeclared-type-noerror-with-reactivecocoa

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!