Jetpack Compose中调用Map.forEach编译提示需写扩展函数原因问询
错误根本原因
你调用forEach的位置处于LazyColumn的DSL作用域(也就是LazyListScope的作用域)内,LazyListScope本身自带一个单参数的forEach扩展方法,编译器会优先匹配作用域内的这个方法,而不是Kotlin标准库中Map的双参数forEach,所以会报「期望2个参数但只找到1个」「缺少component2()函数」的解构错误。
之前能正常运行的常见原因:要么是你之前使用的Compose版本还未在LazyListScope中引入同名的forEach方法,要么是Android Studio之前的索引缓存异常,重启后索引刷新才识别到作用域内的方法冲突。
解决方案
最简单的修复方式是显式遍历Map的Entry集合,避开方法名冲突,把代码中grouped.forEach修改为grouped.entries.forEach即可:
LazyColumn { grouped.entries.forEach { (initial, plantsForInitial) -> stickyHeader { CharacterHeader(initial) } items(plantsForInitial) { plant -> PlantListItem(plant) } } }
额外注意
你定义的PlantList数据类存在语法错误,List需要指定泛型参数,正确写法参考:
data class PlantList(var plants: List<Plant>)
内容的提问来源于stack exchange,提问作者intA
相关产品推荐
相关产品推荐

