ViewModel后台属性[kotlin]



查看一些谷歌演示应用程序(如向日葵或谷歌io 2018应用程序(的代码,我注意到对于viemodels的支持属性,它们使用了一个带有自定义getter的相同类型的单独实例;像这样:

private val _userData: MutableLiveData<User>
val userData: LiveData<User>
get() = _userData

但他们为什么这么做?直接访问_userData不是更好吗?这可能是因为当_userDataMutableLiveData时,他们不希望观察者能够更改值吗?

暴露于Activity或Fragment的userData必须是不可变的,因为视图只需要观察到LiveData。因此,我们需要使实际的_userData返回一个LiveData

一种方法是使用Kotlin编码约定,创建两个变量_userDatauserData,一个是可变的,另一个不是:

如果一个类有两个属性,它们在概念上是相同的,但只有一个是公共API的一部分,另一个是实现细节,使用下划线作为私有属性名称的前缀。

最新更新