我正在尝试为Observable.subscribe编写一个扩展功能,该功能会自动记录错误。
fun <T> Observable<T>.subscribeAndLogE(onNext: Consumer<in T>): Disposable =
subscribe(onNext, ErrorConsumer())
ErrorConsumer可以正常工作并且可能会记录错误,但是subscribeAndLogE
不像.subscribe()
那样接受lambda。
observer.subscribe {
//works
}
observer.subscribeAndLogE {
//does not work
}
它说:
该OnboardingScreen通常为值T
。
我没有看到Consumer<in T>
中原始的Observable
在接受lambda方面做任何特殊的事情。我在这里做错了什么?
答案 0 :(得分:3)
您正在将Consumer
类型的参数传递给该函数。您需要传递一个函数以使lambda语法起作用。这样可以按照您想要的方式工作:
fun <T> Observable<T>.subscribeAndLogE(onNext: (it : T) -> Unit): Disposable =
subscribe({ onNext(it) },{ throwable -> Log(throwable) })
并像这样使用它:
observer.subscribeAndLogE {
//works
}