Я использую 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()
}
}
Пример кода, приведенный выше, содержит метод обратного вызова (который ожидаетполучить целое число) и содержит вызов метода startCounting из класса SampleApi, ожидающего получения функции.
Проблема, с которой я столкнулся, заключается в следующей строке:
sampleApi.startCounting(5, {counterCallBack()})
Ошибкав Android Studio это связано с тем, что значение означает, что функция ожидает целое число, и, следовательно, я получаю сообщение об ошибке:
No value passed for parameter 'counter'
Я пытался взглянуть на лямбды, но не думал, что это проблема,Я искал, чтобы увидеть, существует ли ответ на этот вопрос, и, хотя полезно, они, кажется, не рассматривали тот же вариант использования, что и мой.
Любая помощь с этим будет очень признательна.