为什么我无法在相应范围内调用类扩展函数?

问题描述 投票:0回答:1

我有一些带有扩展功能的类,例如:

class SampleClass {

    fun NavGraphBuilder.navGraph() { }
}

当我尝试在 NavGrapghBuilder 范围内调用此函数时,它不起作用

 val sampleClass = SampleClass()
 NavHost(navController = rememberNavController(), startDestination = Player) {
    sampleClass.navGraph() // Unresolved reference: navGraph
 }

NavHost 是带有接收器的尾随 lambda 的函数:

@Composable
public fun NavHost(
    // ... 
    builder: NavGraphBuilder.() -> Unit
): Unit
android kotlin android-jetpack-compose
1个回答
0
投票

navGraph
需要多种接收器类型,一种是
SampleClass
,另一种是
NavGraphBuilder
。由于您将该函数定义为
NavGraphBuilder
的扩展,因此您不能使用
SampleClass
对象作为显式接收器。但如果你把它转过来,它就会起作用:

with(sampleClass) { navGraph() }
© www.soinside.com 2019 - 2024. All rights reserved.