在jetpack compose中分配remeber时,=运算符和保留字by有什么区别?

Pie*_*ira 1 android kotlin android-jetpack-compose

我想知道以下之间的区别:

var textFieldState = remember {
    mutableStateOf("")
}
Run Code Online (Sandbox Code Playgroud)

var textFieldState by remember {
    mutableStateOf("")
}
Run Code Online (Sandbox Code Playgroud)

与其他相比有什么优势吗?

Com*_*are 5

与其他相比有什么优势吗?

第一个确实应该是 aval而不是 a var。否则,它们是等效的。或者,引用文档

可通过三种方法在可组合项中声明 MutableState 对象:

  • val mutableState = remember { mutableStateOf(default) }
  • var value by remember { mutableStateOf(default) }
  • val (value, setValue) = remember { mutableStateOf(default) }

这些声明是等效的,并且作为状态的不同用途的语法糖提供。您应该选择在您正在编写的可组合项中生成最容易阅读的代码的代码。

在这三个中:

  • 在第一个中,mutableState保存一个MutableState,您可以使用.value.value=来操作内容
  • 在第二个中,value保存 a MutableState,但by语法告诉编译器将其视为属性委托,因此我们可以假装value只保存基础数据
  • 第三种,解构声明为您提供 getter 和 setter 引用来操作底层的内容MutableState