Kotlin setOnclickListener

Назад в java Я использовал для записи только return для метода void … Но 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 } } 

С сайта kotlinlang :

Вернуться на этикетках

С функциональными литералами, локальными функциями и выражением объекта функции могут быть вложены в Kotlin. Квалифицированные возвращения позволяют нам вернуться из внешней функции. Наиболее важным вариантом использования является возврат из лямбда-выражения. Напомним, что когда мы пишем это:

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

return выражение возвращается из ближайшей закрывающей функции, то есть foo. (Обратите внимание, что такие нелокальные возвращения поддерживаются только для лямбда-выражений, переданных встроенным функциям.) Если нам нужно вернуться из выражения лямбда, мы должны пометить его и присвоить ему return :

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

Теперь он возвращается только из выражения лямбда. Часто удобнее использовать ярлыки implicits: такая метка имеет то же имя, что и функция, которой передается лямбда.

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

Когда внутри лямбда, вы должны указать область, из которой вы хотите return , потому что она может быть неоднозначной. См. Официальные документы о возврате на этикетках .

В этом конкретном случае, если вы вернетесь в конце функции, которая ничего не возвращает, вы можете вообще опустить оператор return .

Intereting Posts
Как обрабатывать обработку ошибок в одном месте в rxjava с помощью обертки Android WebView прыгает вверху каждого обновления страницы (?) Невозможно остановить исключение в IntelliJ IDEA при написании кода Котлина Конфигурация запуска / отладки Kotlin compileKotlin block in build.gradle file throws error "Не удалось найти метод compileKotlin () для аргументов " FIRESTORE постоянные данные Столкновение с расширением Kotlin Цепочные обещания с пользовательскими типами ошибок с Kovenant Как издеваться над одним и тем же методом несколько раз, используя mockito Android kotlin onCreate (savedInstanceState: Bundle?) Вызывает исключение IllegalArgumentException Можно ли использовать деструктурирование в аргументах функции? Ошибка Android Studio XML «Соответствующий обработчик методов не найден» on onClick как конвертировать дату UTC в местное время GMT на Android Kotlin неразрешимая ссылка в IntelliJ Kotlin coroutines в Android: зачем использовать bg () из Anko вместо async ()?