簡體   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