Tendo este estado:
sealed interface BusStopsDBScreenUiState {
val message: StringResource?
data class Loading(override val message: StringResource? = null) : BusStopsDBScreenUiState
data class Error(override val message: StringResource? = null) : BusStopsDBScreenUiState
data class Success(val data: List<BusStop>, override val message: StringResource? = null) : BusStopsDBScreenUiState
}
E este cheque:
if ((currentState is BusStopsDBScreenUiState.Success) || (currentState is BusStopsDBScreenUiState.Error))
_uiState.value = currentState.copy(message = null)
}
Estou recebendo este erro durante copy
a chamada:
Referência não resolvida: cópia
Se eu remover o ||
operador e deixar simplesmente if (currentState is BusStopsDBScreenUiState.Success)
copiar, esse erro não ocorrerá mais.
Como isso é possível? Como isso pode ser resolvido?
Você só pode usar
copy
em uma classe de dados.currentState
não pode ser smart-cast para nenhuma classe de dados específica porque pode serSuccess
ouError
. Então seu tipo é o supertipo comumBusStopsDBScreenUiState
, e isso é uma interface e não uma classe de dados, portanto nenhumacopy
função.Isso muda quando você testa apenas um único tipo de classe de dados (fe
Success
, sem usar||
), então o compilador pode fazer smart-castcurrentState
para esse tipo que é uma classe de dados. E então você pode usarcopy
.