我正在使用Kotlin(用于Android开发),并尝试将一个函数作为回调传递给另一个函数。由于现在只是一个测试,所以代码非常基本。
请注意,尽管您可能会想知道我为什么要像这样使用回调,但这只是为了测试目的。在我的实际应用程序中,我希望将回调分配给一个值,并在异步方法完成后稍后调用它。
由于此代码将用于多平台解决方案,因此我无法使用协程等内容,因此对使函数成为回调感兴趣。 我将接收该函数(回调)的Kotlin类:
上面是一个基本的类,其中有一个名为startCounting的函数,该函数将接收一个整数和一个函数作为参数。然后它会调用那个函数并传入一个值。 调用代码:
上面展示的示例代码包含回调方法(期望接收一个整数),并且包含对期望接收函数的SampleApi类中的startCounting方法的调用。
我遇到的问题是这一行:
Android Studio 中的错误是因为该函数期望一个整数值,但实际传递的不是整数导致出现了错误:
我尝试查看lambda表达式,但认为那不是问题所在。我已经搜索过是否有现成的解答,虽然它们很有帮助,但似乎没有考虑到与我的使用情况相同的情况。
非常感谢您提供任何帮助。
请注意,尽管您可能会想知道我为什么要像这样使用回调,但这只是为了测试目的。在我的实际应用程序中,我希望将回调分配给一个值,并在异步方法完成后稍后调用它。
由于此代码将用于多平台解决方案,因此我无法使用协程等内容,因此对使函数成为回调感兴趣。 我将接收该函数(回调)的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表达式,但认为那不是问题所在。我已经搜索过是否有现成的解答,虽然它们很有帮助,但似乎没有考虑到与我的使用情况相同的情况。
非常感谢您提供任何帮助。