#android #kotlin
#Android #kotlin
Вопрос:
У меня этот запечатанный класс представляет состояние просмотра
sealed class ViewState<out ResultType>(
) {
data class Success<ResultType>(val data: ResultType?) : ViewState<ResultType>()
data class Error(val message: String) : ViewState<Nothing>()
object Loading : ViewState<Nothing>()
}
здесь я использую ViewState
fun <T, A> performGetOperation(databaseQuery: () -> LiveData<T>)): LiveData<ViewState<T>> =
liveData(Dispatchers.IO) {
emit(ViewState.Loading)
val cache: LiveData<ViewState.Success<T>> = databaseQuery.invoke()
.map { ViewState.Success<T>(it) }
emitSource(cache)
}
эта строка сумасшедшая emitSource (кэш) дайте мне emitSource (кэш)
Required:
LiveData<ViewState<T>>
Found:
LiveData<ViewState.Success<T>>
Комментарии:
1. попробуйте вернуться
LiveData<ViewState.Success<T>>
из функции вместоLiveData<ViewState<T>>
2. испускать (состояние просмотра. Загрузка) будет кричать
3. Не могли бы вы лучше отформатировать свой код. У вас много ненужных пустых строк. Какая строка в вашем коде выдает эту ошибку?
4. @ChristianB эта строка испускает источник (кэш)
Ответ №1:
Это была простая проблема с определением типа. Вы определили cache
как LiveData<ViewState.Success<T>>
, который не соответствует возвращаемому типу LiveData<ViewState<T>>
.
Вы должны изменить тип с val cache: LiveData<ViewState.Success<T>>
на val cache: LiveData<ViewState<T>>
.
Вот правильные функции:
fun <T, A> performGetOperation(databaseQuery: () -> LiveData<T>)): LiveData<ViewState<T>> = liveData(Dispatchers.IO) {
emit(ViewState.Loading)
val cache: LiveData<ViewState<T>> = databaseQuery.invoke()
.map { ViewState.Success<T>(it) }
emitSource(cache)
}
Комментарии:
1. LiveData<ViewState . Success<T>> является подтипом LiveData<ViewState<T>> .
2. Я знаю. Я не могу объяснить, почему компилятор не может вывести это. Но изменение этого заставит его работать. Вы можете это подтвердить?
3. «LiveData<ViewState. Success<T>> является подтипом LiveData<ViewState<T>>» Это не так; пожалуйста, смотрите kotlinlang.org/docs/reference/generics.html#variance