我有以下代码:
let fetcher = DiagnosticFetcher(commandSender: sender)
fetcher.fetch()
.observeOn(MainScheduler.instance)
.subscribe(
onNext: { self.store.save(content: $0) },
onError: { self.view.showError("Error") },
onCompleted: { log.verbose("Diagnostic fetched") })
Run Code Online (Sandbox Code Playgroud)
它不会编译:Extra argument 'onError' in call。如果使用onSuccess或onDoesNotExistButShowTheBug代替,则会出现相同的错误onNext。
该fetch()方法返回一个Observable<String>(其最后一个运算符为reduce)。subscribe()通话似乎只需要一个lambda:
fetcher.fetch()
.observeOn(MainScheduler.instance)
.subscribe(onNext: { self.store.save(content: $0) })
Run Code Online (Sandbox Code Playgroud)
结果:Extraneous argument label 'onNext:' in call。和:
fetcher.fetch()
.observeOn(MainScheduler.instance)
.subscribe({ self.store.save(content: $0) })
Run Code Online (Sandbox Code Playgroud)
编译良好。
我觉得我得到了错误的subscribe()实现。我想要那个:
public func subscribe(onNext: ((ElementType) -> Void)? = nil,
onError: ((Swift.Error) -> Void)? = nil,
onCompleted: (() -> Void)? = nil) -> Disposable {
Run Code Online (Sandbox Code Playgroud)
但是显然,编译器没有。我正在将XCode 9.2与Swift 4和RxSwift 4.1.1结合使用。
我的应用程序中还有其他部分在onNext:onError:可观察的地方使用。我不能指望这次电话的不同之处。
关于如何确定问题根源的任何想法?
我通过在onErrorlambda中指定第一个参数来编译它:
fetcher.fetch()
.observeOn(MainScheduler.instance)
.subscribe(
onNext: { self.store.save(content: $0) },
onError: { _ in self.view.showError("Error")})
Run Code Online (Sandbox Code Playgroud)