switch在Kotlin 的替代品是when.因此,在回收器视图适配器中,当我返回视图类型时,我使用when:
override fun getItemViewType(position: Int): Int {
when (position) {
0 -> return ItemViewType.TITLE.type
1 -> return ItemViewType.SUBTITLE.type
2 -> return ItemViewType.ITEM.type
else -> return -1
}
}
Run Code Online (Sandbox Code Playgroud)
但是,上述声明发出了警告信息Return can be lifted out of 'when'.
有谁知道什么是正确的使用方式when?如何解决上述问题?
s1m*_*nw1 58
你使用的when是一个简单的Java switch语句,它完全没问题,但不是很惯用.您可以通过两个步骤重构代码:
Kotlin when可以用作表达式,如果你愿意,它会返回一个值:
override fun getItemViewType(position: Int): Int {
return when (position) {
0 -> ItemViewType.TITLE.type
1 -> ItemViewType.SUBTITLE.type
2 -> ItemViewType.ITEM.type
else -> -1
}
}
Run Code Online (Sandbox Code Playgroud)函数体由单个语句组成,可以更改为表达式主体:
override fun getItemViewType(position: Int) = when (position) {
0 -> ItemViewType.TITLE.type
1 -> ItemViewType.SUBTITLE.type
2 -> ItemViewType.ITEM.type
else -> -1
}
Run Code Online (Sandbox Code Playgroud)你when是对的,但是如果你在任何情况下都返回,Kotlin 有能力从“何时”中解除返回,因此它变成:
override fun getItemViewType(position: Int): Int {
return when (position) {
0 -> ItemViewType.TITLE.type
1 -> ItemViewType.SUBTITLE.type
2 -> ItemViewType.ITEM.type
else -> -1
}
}
Run Code Online (Sandbox Code Playgroud)
if在 Kotlin 中,包括、whenand在内的多个语句try可以返回值。因此,在您的情况下,您可以重构该语句,让该when语句返回实际值,然后您可以从函数返回该值。
因此,您可以将方法简化为以下内容:
override fun getItemViewType(position: Int): Int = when (position) {
0 -> ItemViewType.TITLE.type
1 -> ItemViewType.SUBTITLE.type
2 -> ItemViewType.ITEM.type
else -> -1
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10301 次 |
| 最近记录: |