Android Kotlin Jetpack在委托属性中组合理解类型

Android Kotlin Jetpack在委托属性中组合理解类型,android,kotlin,android-jetpack-compose,delegated-properties,Android,Kotlin,Android Jetpack Compose,Delegated Properties,使用委托财产时,我很难理解财产的类型。例如,从这个喷气式飞机的组成,它说这两件事是相同的 1. val name: String by helloViewModel.name.observeAsState("") 2. val nameState: State<String> = helloViewModel.name.observeAsState("") 1。val名称:由helloViewModel.name.observeAsSta

使用委托财产时,我很难理解财产的类型。例如,从这个喷气式飞机的组成,它说这两件事是相同的

 1. val name: String by helloViewModel.name.observeAsState("")
 2. val nameState: State<String> = helloViewModel.name.observeAsState("")
1。val名称:由helloViewModel.name.observeAsState(“”)表示的字符串
2.val nameState:State=helloViewModel.name.observeastate(“”)
我已经查阅了Kotlin委托财产文件。对于第一个示例,根据文档,
val name:String
,当我们尝试读取此
name
属性时,它将调用委托实例上的
getValue()
函数,其返回类型将是
String
,而不是
State
。但是为什么它会返回
状态,这部分我没有完全理解

你能告诉我我缺少什么来理解这个逻辑吗,或者任何指向文档/博客帖子的链接都很好。谢谢

val nameState: State<String> = helloViewModel.name.observeAsState("")
val name: String = nameState.value
这种语法非常相似,唯一的区别是它将局部变量声明为委托属性,其中只返回
状态
的属性

委托的
getValue
实现(从Compose的实现中,注意它只返回
状态
的值):

inline操作符fun State.getValue(thisObj:Any?,属性:KProperty):T=value
val name: String by helloViewModel.name.observeAsState("")
inline operator fun <T> State<T>.getValue(thisObj: Any?, property: KProperty<*>): T = value