我有一个密码
var exampleData = MutableLiveData<String>()
private set
我想将setter隐藏为MutableLiveData的值
exampleData.value = "Hi!" // still working
我尝试了几种方法,但是都可以!
var exampleData = MutableLiveData<String>()
private set(value) { field = value } // Working!
var exampleData = MutableLiveData<String>()
internal set // Working!
var exampleData = MutableLiveData<String>()
internal set(value) { field = value } // Working!
如何隐藏此二传手?
答案 0 :(得分:5)
属性的设置器与您的MutableLiveData
无关,因为它在对象本身内部具有可变性。您必须将其转换为LiveData
,可以使用后备属性来完成。
private val _exampleData = MutableLiveData<String>()
val exampleData: LiveData<String> get() = _exampleData
您可以使用_exampleData.value = "value"
来私下更改值,并且仅公开不可变的LiveData
。
答案 1 :(得分:0)
从LiveData和MutableLiveData的文档中可以看出,LiveData中的setValue()
和postValue()
方法不是公开的。而在MutableLiveData中可以访问它们。因此,如果要使它们不可访问,请将其更改为LiveData
,而不要使用MutableLiveData
。