如何使用 Kotlin 在 Android 中使用密封的 类?
How to use sealed classes in Android using Kotlin?
我无法理解 how/when 使用 Kotlin 在 Android 中使用密封 类。我已经阅读了文档,但仍然对它的结构以及如何使用它感到困惑。如果有人能帮助我理解这一点,那将很有帮助。
Sealed classes 允许我们以更灵活的方式表示层次结构。它也更具可读性,可用于更好的状态管理。
Sealed class 的子 classes 可以是任何类型,例如:数据 class、对象 class、任何常规 class,甚至是另一个密封的class.
这就是我们使用 Kotlin 在 Android 中定义密封 class 的方式:
sealed class UiState {
object Loading : UiState()
data class Success(val successMessage: String) : UiState()
data class Error(val error: Throwable?) : UiState()
}
让我们来理解这部分代码:
object Loading : UiState() : 将其声明为一个对象,因为在这个阶段我们不需要知道任何其他信息。
data class Success(val successMessage: String) : UiState() : 声明为数据 class,因为我们在获取时需要消息成功状态。
data class Error(val error: Throwable?) : 将此声明为数据 class,因为我们在获得错误状态时需要 Throwable .
注意我们如何使用 对象加载:UiState()。我们使用与 return 类型的“Loading”对象相同的密封 class 名称。
这就是说,“Loading”对象属于密封的“UiState”class。
成功和错误状态也是如此。
然后我们可以使用这个密封的 class 如下:
fun observeUiStates(uiState: UiState) = when(uiState) {
UiState.Loading -> println("Loading...Please wait.")
is UiState.Success -> println(uiState.successMessage)
is UiState.Error -> println(uiState.errorMessage)
}
在上述代码块中,我们将 UiState sealed class 作为参数传递给 observeUiStates() 方法然后通过使用 when 我们正在检查哪个是应用程序的当前状态,然后我们将相应地处理这些状态。
为了这个例子,我只是在控制台打印结果。
密封 classes,最好使用 RxJava[=62= 在 Android 中使用 Model-View-Intent 模式].
通过使用它们,我们现在可以观察状态变化。
每当应用程序出现新状态时,此 observeUiStates() 方法将仅向我们提供该特定状态。
为了简化此特定示例,我从 main() 调用此方法。请看下面的代码:
fun main() {
observeUiStates(UiState.Loading)
observeUiStates(UiState.Success("The Ui has returned success state.”))
}
这将在控制台中打印以下内容:
Loading...Please wait.
The Ui has returned success state.
我无法理解 how/when 使用 Kotlin 在 Android 中使用密封 类。我已经阅读了文档,但仍然对它的结构以及如何使用它感到困惑。如果有人能帮助我理解这一点,那将很有帮助。
Sealed classes 允许我们以更灵活的方式表示层次结构。它也更具可读性,可用于更好的状态管理。 Sealed class 的子 classes 可以是任何类型,例如:数据 class、对象 class、任何常规 class,甚至是另一个密封的class.
这就是我们使用 Kotlin 在 Android 中定义密封 class 的方式:
sealed class UiState {
object Loading : UiState()
data class Success(val successMessage: String) : UiState()
data class Error(val error: Throwable?) : UiState()
}
让我们来理解这部分代码:
object Loading : UiState() : 将其声明为一个对象,因为在这个阶段我们不需要知道任何其他信息。
data class Success(val successMessage: String) : UiState() : 声明为数据 class,因为我们在获取时需要消息成功状态。
data class Error(val error: Throwable?) : 将此声明为数据 class,因为我们在获得错误状态时需要 Throwable .
注意我们如何使用 对象加载:UiState()。我们使用与 return 类型的“Loading”对象相同的密封 class 名称。 这就是说,“Loading”对象属于密封的“UiState”class。
成功和错误状态也是如此。
然后我们可以使用这个密封的 class 如下:
fun observeUiStates(uiState: UiState) = when(uiState) {
UiState.Loading -> println("Loading...Please wait.")
is UiState.Success -> println(uiState.successMessage)
is UiState.Error -> println(uiState.errorMessage)
}
在上述代码块中,我们将 UiState sealed class 作为参数传递给 observeUiStates() 方法然后通过使用 when 我们正在检查哪个是应用程序的当前状态,然后我们将相应地处理这些状态。
为了这个例子,我只是在控制台打印结果。
密封 classes,最好使用 RxJava[=62= 在 Android 中使用 Model-View-Intent 模式].
通过使用它们,我们现在可以观察状态变化。
每当应用程序出现新状态时,此 observeUiStates() 方法将仅向我们提供该特定状态。
为了简化此特定示例,我从 main() 调用此方法。请看下面的代码:
fun main() {
observeUiStates(UiState.Loading)
observeUiStates(UiState.Success("The Ui has returned success state.”))
}
这将在控制台中打印以下内容:
Loading...Please wait.
The Ui has returned success state.