Intereting Posts
Является ли `foo as? Foo` полный эквивалент `foo as Foo?` В kotlin? Это правильный способ бросить Использование EventBus для завершения операции из базовой операции? Android-устройство logcat продолжает работать Функция расширения Kotlin доступа к частному полю Java Я сейчас разрабатываю приложение для Android с Kotlin, но произошла ошибка: CompilationException: не удалось встроить метод в 'readText' Аргументы по умолчанию против перегрузок, когда использовать Переназначение переменных посредством деструктурирования Kotlin: Как проверить, имеет ли число десятичные точки (решение модуля не работает) Kotlin автоматически завершает переопределения в Android Studio Зависимые компоненты Dagger2 Есть ли способ легко открыть и закрыть поток в котлин? Что такое эквивалент Котлина для поразрядного или с присвоением '| ='? Является ли формат данных, хранящихся в kotlin.MetaData документированы где угодно? Android Studio 3.0 Предварительный просмотр Отсутствует Импорт при рефакторинге кода Котлина

Как вернуться из функции функции Котлина

Я использую тип функции для сохранения кода, который вызывается при нажатии кнопки.
Как вернуться из этого типа функции
Приведенный ниже код:

var SearchClickEvent: ((searchString: String) -> Unit)? = null inputDialog!!.SearchClickEvent = Search_Click private val Search_Click = { searchString: String -> if(searchString.isEmpty()){ return//Error msg : return is not allowed here //How to return from here } } 

ПРИМЕЧАНИЕ. Я сохраняю кусок кода в переменной, не вызывающей или не записывающей какую-либо функцию

вам нужно создать метку с явным оператором return в lambda, например:

 // label for lambda---v val Search_Click = action@{ searchString: String -> if (searchString.isEmpty()) { return@action; } // do working } 

ИЛИ инвертируйте оператор if, как показано ниже:

 val Search_Click = { searchString: String -> if (!searchString.isEmpty()) { // do working } } 

Вы также можете сделать это следующим образом:

 private val Search_Click = fun(searchString: String) { if (searchString.isEmpty()) return // more code } 

Котлин в действии:

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

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