Kotlin Jetpack Compose 理解委托中的类型 属性

Kotlin Jetpack Compose Understanding Type in Delegate property

在使用委托 属性 时,我很难理解 属性 的 Type。例如,从这个 Jetpack Compose documentation,它说两者是一样的。

 1. val name: String by helloViewModel.name.observeAsState("")
 2. val nameState: State<String> = helloViewModel.name.observeAsState("")

我已经阅读了 Kotlin Delegated 属性 文档 here。对于第一个示例,根据文档 val name:String,当我们尝试读取此 name 属性 时,它将调用委托实例上的 getValue() 函数,其 return 类型将是 String,而不是 State<String>。但是怎么会是returning State<String>,这部分我没有完全理解

你能指出我缺少什么来理解这个逻辑吗,或者任何 link 到 documents/blog post 都很好。谢谢

val nameState: State<String> = helloViewModel.name.observeAsState("")
val name: String = nameState.value

observeAsState's return type is State<R>, where R is String in this case (since name is declared as LiveData<String>). At this stage you can retrieve the state's value from State#value 属性.



val name: String by helloViewModel.name.observeAsState("")

这个语法非常相似,唯一的区别是它将局部变量声明为委托 属性,其中 delegate itself just returns the State's value 属性.

代理的 getValue 实现(来自 Compose 的 source code,注意它只是 returns State 的值):

inline operator fun <T> State<T>.getValue(thisObj: Any?, property: KProperty<*>): T = value