请帮助您理解为什么点击价值不会改变。我开始阅读《行动中的科特琳》,现在问题多于答案(这是开玩笑的书,但是我不是)
我试图在功能之前设置clicks
,这是《行动中的kotlin》一书中的建议,但是var clicks
的值始终为0。
我有以下界面:
interface Button {
fun onClick(function: () -> Unit)
}
和Kotlin文件
fun main() {
var clicks = 0
fun tryToClickOnButton(button: Button): Int{
button.onClick{println("UPP $clicks")}
button.onClick{clicks++}
button.onClick{println("UPP $clicks")}
return clicks
}
class SpecialButton: Button{
override fun onClick(function: () -> Unit) {
println("AAAAAA $clicks")
}
}
val button = object: Button {
override fun onClick(function: () -> Unit) {
println("BBBBB $clicks")
}
}
println(tryToClickOnButton(button))
println(tryToClickOnButton(object : Button{
override fun onClick(function: () -> Unit) {
println("CCCCCCC $clicks")
}
}))
println(tryToClickOnButton(SpecialButton()))
}
答案 0 :(得分:1)
问题是您创建了一个带一个函数的回调,但从未调用该函数。
为了使示例更简单,我们删除一些代码:
fun main() {
var clicks = 0
fun tryToClickOnButton(button: Button): Int {
button.onClick { println("UPP $clicks") }
button.onClick { clicks++ }
button.onClick { println("UPP $clicks") }
return clicks
}
val button = object : Button {
override fun onClick(function: () -> Unit) {
println("BBBBB $clicks")
}
}
println(tryToClickOnButton(button))
}
您可以看到,在Button
的{{1}}回调中,您接受了名为“ onClick
”的“函数”类型的参数,但从未使用过。因此,您永远不会打印“ UPP $ {clicks}”,也永远不会增加function
的值。
要解决此问题,您只需要像这样调用clicks
:
function
该代码显示:
fun main() {
var clicks = 0
fun tryToClickOnButton(button: Button): Int {
button.onClick { println("UPP $clicks") }
button.onClick { clicks++ }
button.onClick { println("UPP $clicks") }
return clicks
}
val button = object : Button {
override fun onClick(function: () -> Unit) {
println("BBBBB $clicks")
function() // this was missing
}
}
println(tryToClickOnButton(button))
}