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
在使用委托 属性 时,我很难理解 属性 的 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