我一直在下面Hannes Dorfman's MVI tutorial和他提到通过注射匕首函数来获取代码,类似于下面的:Dagger2:注射RxJava2功能
注入功能:
@Provides @Singleton
fun providesModelFunc(
searchEngine: SearchEngine): Function1<Observable<String>, Observable<SearchModel>> =
{ stringObservable ->
stringObservable.startWith("").flatMap { queryString -> searchEngine.search(queryString) }
}
功能(modelFunc
)在课堂上使用:
subscription =
modelFunc( // model()
view.searchIntent() // intent()
)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(// view()
view.showData(),
view.showError()
)
我一直在尝试实施类似的事情,但没有在科特林和迄今有功能建设在Module
罚款:
@Provides
@Singleton
Function<Observable<SearchViewQueryTextEvent>, Observable<Object>> providesSearchFunction(DiscogsInteractor discogsInteractor)
{
return searchViewQueryTextEventObservable -> searchViewQueryTextEventObservable.flatMap(queryString ->
{
if (queryString.toString().equals(""))
return Observable.just("");
else
return discogsInteractor.searchDiscogs(queryString.toString());
});
}
然而,使用功能在我Presenter
会引起一些麻烦。它注入好:
private Function<Observable<SearchViewQueryTextEvent>, Observable<Object>> searchModelFunc;
@Inject
public SearchPresenter(SearchContract.View mView, DiscogsInteractor discogsInteractor, Function<Observable<SearchViewQueryTextEvent>, Observable<Object>> searchModelFunc)
{
this.mView = mView;
mInteractor = discogsInteractor;
this.searchModelFunc = searchModelFunc;
}
但是,由于Kotlin语法有点不同,我努力将其应用于我的意图。我不能使用
searchModelFunc(mView.searchIntent())
因为这不是Android的语法。所以,我已经定居
mView.searchIntent().map(searchModelFunc);
之前,我深入学习科特林,什么是正确的语法?