Jetpack Compose 应如何引用可组合的高阶函数?
How should a composable higher order function be referenced with Jetpack Compose?
我正在使用 Jetpack Compose 版本 0.1.0-dev13
我编写了一个简单的可组合函数,它使用带有项目列表的 AdapterList
。 (注意:当使用 lambda 而不是使用 ::
语法的引用时,这会按预期工作)
AdapterList(data = items, itemCallback = ::ItemCard)
供参考,AdapterList
签名如下:
@Composable
fun <T> AdapterList(
data: List<T>,
modifier: Modifier = Modifier,
itemCallback: @Composable (T) -> Unit
)
为了更好地促进个人预览,我将项目回调分解为一个单独的可组合函数。
ItemCard
函数如下所示:
@Composable
private fun ItemCard(item: Item) {
Card(
color = item.type.getColor()
) {
Text(
item.name,
style = MaterialTheme.typography.h5
)
}
}
据我了解,ItemCard
函数的签名为@Composable (Item) -> Unit
,应该满足AdapterList
的itemCallback
参数的类型。
此时 IDE 中没有错误显示。
但是,在尝试构建项目时,显示以下错误:
Type mismatch: inferred type is KFunction1<Item, Unit> but (Item) -> Unit was expected
这两种类型有什么区别,应该如何更改 ItemCard
(或对它的引用)以满足类型约束?
您可以使用:
AdapterList(data = items){ ItemCard(item = it) }
或
AdapterList(data = items, itemCallback= { ItemCard(it) } )
好的,the preliminary analysis是:这是一个错误。
(注意:上一段中的 link 需要 Kotlinlang Slack 访问权限)
我提交了 an issue for this (which was subsequently marked as a duplicate of this issue)。所以,与此同时,你被 lambda 表达式困住了。但是,请密切关注该问题,因为我们可能会在那里找到解决方法。
我正在使用 Jetpack Compose 版本 0.1.0-dev13
我编写了一个简单的可组合函数,它使用带有项目列表的 AdapterList
。 (注意:当使用 lambda 而不是使用 ::
语法的引用时,这会按预期工作)
AdapterList(data = items, itemCallback = ::ItemCard)
供参考,AdapterList
签名如下:
@Composable
fun <T> AdapterList(
data: List<T>,
modifier: Modifier = Modifier,
itemCallback: @Composable (T) -> Unit
)
为了更好地促进个人预览,我将项目回调分解为一个单独的可组合函数。
ItemCard
函数如下所示:
@Composable
private fun ItemCard(item: Item) {
Card(
color = item.type.getColor()
) {
Text(
item.name,
style = MaterialTheme.typography.h5
)
}
}
据我了解,ItemCard
函数的签名为@Composable (Item) -> Unit
,应该满足AdapterList
的itemCallback
参数的类型。
此时 IDE 中没有错误显示。
但是,在尝试构建项目时,显示以下错误:
Type mismatch: inferred type is KFunction1<Item, Unit> but (Item) -> Unit was expected
这两种类型有什么区别,应该如何更改 ItemCard
(或对它的引用)以满足类型约束?
您可以使用:
AdapterList(data = items){ ItemCard(item = it) }
或
AdapterList(data = items, itemCallback= { ItemCard(it) } )
好的,the preliminary analysis是:这是一个错误。
(注意:上一段中的 link 需要 Kotlinlang Slack 访问权限)
我提交了 an issue for this (which was subsequently marked as a duplicate of this issue)。所以,与此同时,你被 lambda 表达式困住了。但是,请密切关注该问题,因为我们可能会在那里找到解决方法。