繁体   English   中英

kotlin中的LiveData地图转换

[英]LiveData map transformations in kotlin

LiveData转换中的Transformations.map有两个参数:

  1. @NonNull LiveData源码
  2. @NonNull最终函数函数

我试着把这个函数做成这样的:

val localLiveData = #some live data of type LiveData<User>
Transformations.map(localLiveData, s->{return s.name = "Hi"})

但这显示错误无法解决“s”

最后我得到了它的工作:

Transformations.map(localLiveData) {
              s.name = "Hi"
                return@map s
            }

这个东西如何工作地图只有一个参数? (kotlin的noob)

这里的大多数问题都是Kotlin的lambda语法,它与其他一些语言略有不同。

在Kotlin,一个lambda必须有括号。 但是->在某些情况下是可选的(如果lambda没有参数;或者如果它需要一个,你用虚拟名称引用it )。

这是您的第一个版本失败的原因之一; 它需要s ->在支架内移动。 (另一个是在Kotlin中,赋值不是表达式,并且不返回值,因此您不能在return使用它。)

你的第二个工作是因为在Kotlin中,如果最后一个参数是lambda,它可以移到括号之外。 (这允许看起来像语言语法的高阶函数。事实上,如果lambda是唯一的参数,你可以完全省略括号!)

我不知道LiveData,但我想知道return@map是否做了正确的事情:它不仅会从lambda返回,还会从map()方法本身返回。 (这种非本地回报不是经常需要的,而且可能令人困惑。)

此外,lambda不需要显式return ; 它返回其最后一个表达式的值。

所以我怀疑更简洁的版本是:

Transformations.map(localLiveData) { it.name = "Hi"; it }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM