gpt4 book ai didi

android - 在 Kotlin 中传递需要参数的函数作为回调

转载 作者:搜寻专家 更新时间:2023-11-01 08:17:53 25 4
gpt4 key购买 nike

我正在使用 Kotlin(用于 Android 开发)并且我正在尝试将一个函数传递给另一个我想用作回调的函数。代码非常基础,因为这只是目前的测试。

请注意,尽管您可能想知道为什么我要使用这样的回调,但这只是为了测试目的。在我的实际应用程序中,我想将回调分配给一个值,并在异步方法完成后稍后调用它。

我不能使用协程等...因为此代码将用于多平台解决方案,因此我对进行函数回调很感兴趣。

将接收函数(回调)的我的 Kotlin 类

class SampleApi {
private var counter: Int = 0

fun startCounting(initialValue: Int, counterCallBack: (resultVal: Int) -> Unit) {
counter = initialValue

counter++

counterCallBack(counter)
}
}

上面是一个基本类,它有一个函数startCounting,它将接收一个整数和一个函数。然后它将调用该函数并传入一个值。

调用代码

class MainActivity : AppCompatActivity() {

private val sampleApi: SampleApi = SampleApi()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

sampleApi.startCounting(5, {counterCallBack()})
}

private fun counterCallBack(counter: Int) {
Toast.makeText(this, counter.toString(), Toast.LENGTH_SHORT).show()
}
}

上面显示的示例代码包含回调方法(期望接收整数),并包含从期望接收函数的 SampleApi 类调用 startCounting 方法。

我遇到的问题是这一行:

sampleApi.startCounting(5, {counterCallBack()})

Android Studio 中的错误是由于一个值​​是函数需要一个整数,因此我收到错误:

No value passed for parameter 'counter'

我试图查看 lambda,但认为这不是问题所在。我已经搜索过是否已经存在对此的答案,虽然有帮助,但他们似乎没有考虑与我相同的用例。

如有任何帮助,我们将不胜感激。

最佳答案

因为 counterCallback 有你需要的类型,你也可以使用 function reference而不是 lambda:

sampleApi.startCounting(5, ::counterCallBack)

关于android - 在 Kotlin 中传递需要参数的函数作为回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56901680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com