第 20 课2026.09.28
在同一处展示状态文字,并只为有具体错误消息的失败状态显示重试提示。
第 20 课:组合状态文案与重试提示
- 日期:2026-09-28
- 课程序号:第 20 课
- 知识点:组合已有状态映射结果
用途或适用场景
在同一处展示状态文字,并只为有具体错误消息的失败状态显示重试提示。
核心概念
保持 label 与 canRetry 的原有规则,用一个显示函数组合二者,不复制状态判断逻辑。
最小代码或操作示例
kotlin
sealed interface State {
data object Loading : State
data class Ready(val count: Int) : State
data class Error(val message: String) : State
}
fun label(state: State) = when (state) {
State.Loading -> "加载中"
is State.Ready -> "共 ${state.count} 节"
is State.Error -> state.message.ifBlank { "加载失败" }
}
fun canRetry(state: State) = state is State.Error && state.message.isNotBlank()
fun display(state: State): String =
label(state) + if (canRetry(state)) " · 可重试" else ""
fun main() {
println(display(State.Error("网络失败"))) // 网络失败 · 可重试
println(display(State.Error(" "))) // 加载失败
}3~5 分钟练习
传入 State.Ready(3),预测显示文字。
参考答案
输出“共 3 节”;canRetry 为 false,不会追加重试提示。
与上一课的联系
沿用第 17 课的 label 和第 19 课的 canRetry;本课只新增 display 组合两者;下一课可把显示结果和重试布尔值分别交给真正的界面组件。
时效校验
时效校验:2026-09-28(已打开 Kotlin 当前 when/if 与类型检查官方文档;data object 需 Kotlin 1.9+,组合写法未见废弃标记)。