[英]Why use "sealed class" and make object in Navigation? (Kotlin Jetpack Compose)
[英]Kotlin sealed class when expression not working in compose
我有以下代碼:
sealed class ChooseCarState {
data class ShowCarsState(val car: Int) : ChooseCarState()
object ShowLoadingState : ChooseCarState()
data class ShowError(val message: String) : ChooseCarState()
}
當在可組合 function 中觀察來自 ViewModel 的密封 class 時:
@Composable
fun showCars(){
val state = viewModel.chooseCarState.collectAsState()
when(state.value){
is ChooseCarState.ShowCarsState->{
val car = (state.value as ChooseCarState.ShowCarsState).car
}
is ChooseCarState.ShowLoadingState->{
}
is ChooseCarState.ShowError ->{
val message = (state.value as ChooseCarState.ShowError).message
}
}
}
我得到了 ClassCastException,盡管我在is
語句中進行轉換。
可能是什么問題?
問題在於,從編譯器的角度來看,無法保證state.value
將始終返回相同的值,因為它不是最終字段。 您可以通過將state.value
分配給一個變量來解決此問題,然后您可以安全地對其進行轉換。 然后可用於智能演員。
@Composable
fun showCars(){
val state = viewModel.chooseCarState.collectAsState()
when(val currentState = state.value){
is ChooseCarState.ShowCarsState->{
val car = currentState.car
}
is ChooseCarState.ShowLoadingState->{
}
is ChooseCarState.ShowError ->{
val message = currentState.message
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.