Android Jetpack Compose,字段暴露

huangapple go评论65阅读模式
英文:

Android Jetpack compose, field expose

问题

val removingPluggableScreens: Boolean get() = _removingPluggableScreens.valueval removingPluggableScreens: Boolean = _removingPluggableScreens.value 之间的区别在于以下部分:

第一种方式(使用get())允许您创建一个只读属性,每次访问 removingPluggableScreens 时都会调用 _removingPluggableScreens.value 来获取最新值。这意味着它会在每次访问时动态获取 _removingPluggableScreens.value 的值。

第二种方式(不使用get())创建了一个简单的只读属性,它在初始化时获取 _removingPluggableScreens.value 的值,然后将其存储在 removingPluggableScreens 中。这意味着 removingPluggableScreens 的值在初始化后不会再随 _removingPluggableScreens.value 的更改而更新。

因此,第一种方式始终提供了最新的 _removingPluggableScreens.value,而第二种方式只提供了初始值。选择哪种方式取决于您的需求,如果需要在每次访问时获取最新值,使用第一种方式更合适。

英文:

I have a question about this code,

    private val _removingPluggableScreens = mutableStateOf(false)
    val removingPluggableScreens: Boolean get() = _removingPluggableScreens.value

    fun updateRemovingPluggableScreens(shouldRemovePluggableScreens: Boolean) {
        if (shouldRemovePluggableScreens != _removingPluggableScreens.value) {
            _removingPluggableScreens.value = shouldRemovePluggableScreens
        }
    }

The code is working fine as expected, but if I change the code this way-- without get() for removingPluggableScreens field it does not work as expected,

    private val _removingPluggableScreens = mutableStateOf(false)
    val removingPluggableScreens: Boolean = _removingPluggableScreens.value

    fun updateRemovingPluggableScreens(shouldRemovePluggableScreens: Boolean) {
        if (shouldRemovePluggableScreens != _removingPluggableScreens.value) {
            _removingPluggableScreens.value = shouldRemovePluggableScreens
        }
    }

When I observe the state like this, it's not working correctly if I choose the second approach, but it works fine if I choose the first approach:

    val removingPluggableScreens = viewModel.removingPluggableScreens  
    if (removingPluggableScreens) {
        // do sth here
    }

Simply, I want to know the differences between val removingPluggableScreens: Boolean get() = _removingPluggableScreens.value and val removingPluggableScreens: Boolean = _removingPluggableScreens.value

Thanks in advance.

答案1

得分: 1

当您给变量赋值时,这仅发生一次,在您的情况下是在声明时。将来,您的代码中的这两个变量不以任何方式相关。

当您指定一个getter时,每次读取removingPluggableScreens的值时都会调用它。在您的情况下,这个值将始终与_removingPluggableScreens.value匹配。

英文:

When you assign a value to a variable, this happens only once, in your case, when you declare it. And in the future, these 2 variables in your code are not related in any way.

When you specify a getter, When you specify a getter, it is called every time the value of the removingPluggableScreens is read. And in your case this value will always match the _removingPluggableScreens.value.

huangapple
  • 本文由 发表于 2023年5月17日 21:25:47
  • 转载请务必保留本文链接:https://go.coder-hub.com/76272627.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定