为了解决这个问题,我们需要为LiveData属性添加Kotlin属性委托,并使用NotNull委托来确保它不为空。代码示例如下:
class MyViewModel: ViewModel() {
private val _myLiveData = MutableLiveData()
val myLiveData: LiveData
get() = _myLiveData.notNull()
}
fun LiveData.notNull(): LiveData {
return MediatorLiveData().also { mediator ->
mediator.addSource(this) { value ->
if (value != null) {
mediator.removeSource(this)
mediator.value = value
}
}
}
}
这样做,我们将会得到一个编译时警告,如果我们尝试访问空的LiveData属性,我们可以确保它不为空。