关于使用Transformations.map/switchMap的标红报错问题

562 阅读1分钟

前言

最近在学习《第一行代码》第三版的LiveData相关知识时候发现在使用如下代码的时候Transformations会标红报错:

val userName: LiveData = Transformations.map(userLiveData) { user ->
	"${user.firstName} ${user.lastName}" 
}

而我导入的依赖如下:

implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1'

对着Transformations疯狂Alt + Enter也导不到合适的包,最后一通实验下终于找到原因。

原因

我试着降低了依赖版本,如下:

implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0'

最后返回去对着Transformations进行Alt + Enter发现成功导包:

import androidx.lifecycle.Transformations

而我把依赖版本复原后,将上述导包语句粘贴上去,果不其然,报错了

所以得出结论,应该是在最新的依赖版本中不再提供Transformations包,所以导致无法使用

替换方法

既然老方法无法使用,那就必有替换方法,如下:

val userName: LiveData<String> = userLiveData.map { user ->
    "${user.firstName} ${user.lastName}"
}

val userName: LiveData<String> = userLiveData.switchMap { user ->
    "${user.firstName} ${user.lastName}"
}

不再使用Transformations,而实现的效果是一样的。