如何使用 Kotlin 访问 LiveData<List<MVoice>> 的每个元素?

How to access each element of LiveData<List<MVoice>> with Kotlin?

代码 A 使用 for (aMovice in listVoiceBySort.value!!) 访问 LiveData<List<MVoice>> 的每个元素。

但我认为这不是一个好方法,因为它使用listVoiceBySort.value!!,它很丑

是否有访问LiveData<List<MVoice>>的每个元素的好方法?

代码A

 val listVoiceBySort: LiveData<List<MVoice>> =_listVoiceBySort

 fun selectAllIDs(){
   for (aMovice in listVoiceBySort.value!!){
            selectedIDs.add(aMovice.id)
    }
 }

最好使用 forEach 具有相同功能的内联函数。 它允许您使用安全调用 (?.) 而不是非空断言 (!!):

fun selectAllIDs() {
    listVoiceBySort.value?.forEach {
        selectedIDs.add(it.id)
    }
}

另一种方法是将 MVoice 元素映射到它们的 id,然后将它们全部添加到 selectedIDs:

fun selectAllIDs() {
    listVoiceBySort.value?.map { it.id }?.let {
        selectedIDs.addAll(it)
    }
}

通常情况下,livedata 中的数据是通过观察者访问的,在那里您可以获得 non-null 值

listVoiceBySort.observe(lifecycleOwner, Observer {
    for(mVoice in it){
    ...
    }
}