为什么可组合列表在 Jetpack Compose 中不起作用?
Why list of Composable does not work in Jetpack Compose?
我正在尝试学习撰写,但我不明白为什么列表推断类型是 List<Unit>
而不是 List<()->Unit>
。此外 setContent
中的 startingPoint()
不起作用。
@Composable
fun AudioScreen() {
Text(text = "dhgghf")}
@Composable
fun SearchScreen() {Text(text = "dhgghf")}
@Composable
fun startingPoint() {
val menurou = listOf(AudioScreen(),SearchScreen())
menurou[0]
}
那是因为函数 AudioScreen 和 SearchScreen 返回的是 Unit 而不是 () -> Unit。但这与可组合无关。让我们看下面的例子
fun firstFunction(): () -> Unit = { Unit }
val listForFirstFunction: List<() -> Unit> = listOf(firstFuntion())
fun secondFunction(): Unit = Unit
val listForSecondFunction: List<Unit> = listOf(secondFunction)
因为 firstFunction 返回一个 () -> Unit
,listForFirstFunction 的类型得到 () -> Unit
。 secondFunction 也是如此 returns Unit,因此 listForSecondFunction 的类型是 Unit.
但是如果你想把secondFunction保存为() -> Unit,你可以这样写:
val thirdListForFunction = listOf( {secondFunction()} )
然后让你能够写 thirdListForFunction[0].invoke()
moreover startingPoint() in setContent does not work.
我想你是在问为什么 menurou[0]
不能正常工作?那是因为 menurou[0]
只是 returns 单位,而不是所需的功能 AudioScreen()
我正在尝试学习撰写,但我不明白为什么列表推断类型是 List<Unit>
而不是 List<()->Unit>
。此外 setContent
中的 startingPoint()
不起作用。
@Composable
fun AudioScreen() {
Text(text = "dhgghf")}
@Composable
fun SearchScreen() {Text(text = "dhgghf")}
@Composable
fun startingPoint() {
val menurou = listOf(AudioScreen(),SearchScreen())
menurou[0]
}
那是因为函数 AudioScreen 和 SearchScreen 返回的是 Unit 而不是 () -> Unit。但这与可组合无关。让我们看下面的例子
fun firstFunction(): () -> Unit = { Unit }
val listForFirstFunction: List<() -> Unit> = listOf(firstFuntion())
fun secondFunction(): Unit = Unit
val listForSecondFunction: List<Unit> = listOf(secondFunction)
因为 firstFunction 返回一个 () -> Unit
,listForFirstFunction 的类型得到 () -> Unit
。 secondFunction 也是如此 returns Unit,因此 listForSecondFunction 的类型是 Unit.
但是如果你想把secondFunction保存为() -> Unit,你可以这样写:
val thirdListForFunction = listOf( {secondFunction()} )
然后让你能够写 thirdListForFunction[0].invoke()
moreover startingPoint() in setContent does not work.
我想你是在问为什么 menurou[0]
不能正常工作?那是因为 menurou[0]
只是 returns 单位,而不是所需的功能 AudioScreen()