Основано на этой публикации Флорины Мунтенеску. У меня есть 2 вопроса:
Вопрос 1: В следующей ситуации, учитывая Respository
ответ SomeApiResult :
sealed class SomeApiResult<out T : Any> {
object Success : SomeApiResult<Unit>()
object NoAccount : SomeApiResult<Unit>()
sealed class Error(val exception: Exception) : SomeApiResult<Nothing>() {
class Generic(exception: Exception) : Error(exception)
class Error1(exception: Exception) : Error(exception)
class Error2(exception: Exception) : Error(exception)
class Error3(exception: Exception) : Error(exception)
}
}
Последнее при использовании when
в моем ViewModel
Я не смогу сделать что-то вроде:
when (result: SomeApiResult) {
...
is SomeApiResult.Error.Error1,
is SomeApiResult.Error.Error2 -> {
// it will fail with "Unresolved reference: exception"
result.exception
}
is SomeApiResult.Error.Error3 -> {
...
}
}
Как мне решить эту проблему?
Это действительно так:
when (result: Result<Int>) {
...
is SomeApiResult.Error -> result.exception.message
}
Вопрос 2: При создании ответа об ошибке мне нужно создать GenericError , потому что, если я пытаюсь создать экземпляр sealed class
Я получаю ошибку. Вот как я заставляю его работать:
is Result.Error ->
when (result.exception) {
is Error1 -> SomeApiResult.Error.Error1(result.exception)
is Error2 -> SomeApiResult.Error.Error2(result.exception)
...
else -> SomeApiResult.Error.Generic(result.exception)
}
В моем ViewModel
я не буду запрашивать Error.Generic
.
Вместо этого я буду использовать is SomeApiResult.Error
, как показано выше (например, * 1034). * «другие ошибки»). Это правильный путь?