[英]LiveData map transformations in kotlin
LiveData轉換中的Transformations.map有兩個參數:
我試着把這個函數做成這樣的:
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.