为什么我不能使用 `MutableState` 作为属性委托?

2024-03-30

我正在尝试使用一个实例MutableState作为财产代表。

这是我所拥有的:

val countState = remember { mutableStateOf(0) }

这就是我想要的:

var count by remember { mutableStateOf(0) }

但是,当我使用by关键字,我收到编译器错误:

Type 'TypeVariable(T)' has no method 'getValue(Nothing?, KProperty<*>)' and thus it cannot serve as a delegate

出了什么问题?


作为代表,MutableState需要一个getValue函数(用于读取值)和一个setValue函数(用于写入值)。

当您访问MutableState via mutableStateOf,您使用导入:

import androidx.compose.runtime.mutableStateOf

然而,本次进口不包括getValue and setValue函数为MutableState- 它们在单独的文件中定义为扩展函数。要访问它们,需要显式导入该文件。

这本身通常不是问题 - 如果您输入:

countState.getValue(...)

Android Studio 会自动为您建议所需的导入。

然而,当你使用by关键字 - Android Studio 不会自动建议您导入。相反,它会给cannot serve as a delegate错误,没有任何指示您需要做什么。

因此,解决方法是自己手动添加扩展函数的导入:

import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue

希望 IDE 团队中的某个人能够在将来使这一点变得更加明显 - 导入的自动建议将是理想的!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我不能使用 `MutableState` 作为属性委托? 的相关文章

随机推荐