Pri*_*ola 9 lambda android kotlin
在使用Android的时候Switch,我附上了setOnCheckedChangeListener它并得到了这个警告
lambda表达式未使用.如果你的意思是块,你可以使用'run {...}'
这里是代码片段:
switchAction.setOnCheckedChangeListener({
_, isChecked ->
{
preferences.userStatus = isChecked
switchToggleVisibility(isChecked)
if (isChecked) {
fetchStats()
getOrders()
} else {
releaseOrder()
}
}
})
Run Code Online (Sandbox Code Playgroud)
使用run确实修复了此警告,但是有人知道这背后的原因吗?lambda表达式如何未使用?
Rob*_*bin 26
你将Java的lambda表示法与Kotlin的lambda表示法混合,创建一个lambda,在这种情况下返回另一个嵌套的lambda.正确和惯用的语法如下所示:
switchAction.setOnCheckedChangeListener { _, isChecked ->
preferences.userStatus = isChecked
switchToggleVisibility(isChecked)
if (isChecked) {
fetchStats()
getOrders()
} else {
releaseOrder()
}
}
Run Code Online (Sandbox Code Playgroud)
消除所有噪音,正常的lambda看起来像这样:
{ arg1, arg2 -> returnValue }
Run Code Online (Sandbox Code Playgroud)
你这样做了:
{ arg1, arg2 -> { returnValue } }
Run Code Online (Sandbox Code Playgroud)
哪个也可以这样写:
{ arg1, arg2 -> { -> returnValue } }
Run Code Online (Sandbox Code Playgroud)
这种表示法使得lambda不返回返回值更加清楚,但返回另一个没有返回返回值的参数的lambda.
通常,这会被编译器捕获为错误的返回类型,但在您的情况下,不使用lambda的返回值.所以,你只是创建内部lambda而不返回或运行它,这就是你得到警告的原因.
是的
_, isChecked ->
{ ... }
Run Code Online (Sandbox Code Playgroud)
必须更改为
_, isChecked ->
preferences.userStatus = isChecked
switchToggleVisibility(isChecked)
if (isChecked) {
fetchStats()
getOrders()
} else {
releaseOrder()
}
Run Code Online (Sandbox Code Playgroud)
因此,只需除去花括号即可,否则您将创建一个根本不执行的块。或者你也可以
_, isChecked ->
run {
preferences.userStatus = isChecked
switchToggleVisibility(isChecked)
if (isChecked) {
fetchStats()
getOrders()
} else {
releaseOrder()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2997 次 |
| 最近记录: |