RxSwift:订阅Observable <String>时,额外的参数'onError'

fst*_*any 5 swift rx-swift

我有以下代码:

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。如果使用onSuccessonDoesNotExistButShowTheBug代替,则会出现相同的错误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:可观察的地方使用。我不能指望这次电话的不同之处。

关于如何确定问题根源的任何想法?

fst*_*any 5

我通过在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)