Kotlin setOnclickListener

时间:2017-10-20 09:01:28

标签: android kotlin

回到java中我以前只为{void}方法编写return ...但kotlin似乎不允许返回,而是使用return@methodname? 有人可以解释这是什么以及它如何增加价值?

 bAddLine.setOnClickListener {
            val selectedSeries = getSelectedSeries()
            if (selectedSeries.isEmpty()) {
                Toast.makeText(this, getString(R.string.toast_channel_mandatory), Toast.LENGTH_LONG).show()
                return@setOnClickListener
            }
        }

2 个答案:

答案 0 :(得分:7)

来自kotlinlang网站:

以标签返回

使用函数文字,局部函数和对象表达式,函数可以嵌套在Kotlin中。合格的回报允许我们从外部函数返回。最重要的用例是从lambda表达式返回。回想一下,当我们写这篇文章时:

fun foo() {
    ints.forEach {
        if (it == 0) return  // nonlocal return from inside lambda directly to the caller of foo()
        print(it)
    }
}

return - 表达式从最近的封闭函数返回,即foo。 (请注意,仅对传递给内联函数的lambda表达式支持此类非本地返回。)如果我们需要从lambda表达式返回,我们必须对其进行标注并限定return

fun foo() {
    ints.forEach lit@ {
        if (it == 0) return@lit
        print(it)
    }
}

现在,它仅从lambda表达式返回。通常使用implicits标签会更方便:这样的标签与lambda传递的函数同名。

fun foo() {
    ints.forEach {
        if (it == 0) return@forEach
        print(it)
    }
}

答案 1 :(得分:2)

当在lambda中时,你必须指定你想要return的范围,因为它可能是不明确的。查看有关returning at labels的官方文档。

在这种特定情况下,如果您在一个不返回任何内容的函数的末尾返回,则可以完全省略return语句。