Хранить лямбда в переменной в котлин

Я начинаю развиваться в Android с kotlin, и у меня проблема с лямбдами. У меня есть функция установки слушателя в моем представлении, это выглядит так:

fun setListener(listener: () -> Unit) { } 

Проблема в том, что код, переданный как lambda, не будет выполняться в функции setListener, он будет выполнен в другой части моего кода (в частности, когда выбран элемент спиннера), поэтому мне нужно «сохранить» или «сохранить», эта lambda в переменную / свойство, чтобы я мог ее выполнить, когда это необходимо. Любая идея о том, как это сделать?

Изменить: я достиг этого, выполняя:

 private var listener: (() -> Unit)? = null fun setListener(listener: () -> Unit) { this.listener = listener } 

Есть ли лучший способ сделать это? благодаря

Вот как вы можете это сделать:

 class Foo { private var listener: () -> Unit = {} fun setListener(listener: () -> Unit) { this.listener = listener } } 

Тем не менее, в Котлине не поощряются ручные установки. Вместо этого вы можете просто сделать вашу собственность открытой:

 class Foo { var listener: () -> Unit = {} } 

Для справки, вот документы о свойствах с большим количеством примеров.

Вы можете легко сохранить функцию в свойстве. Самый простой способ:

 var listener: (() -> Unit)? = null 

Применение:

 foo.listener = { println("called") } 

Если вы хотите, чтобы ваша собственность была только настроена, вы можете создать одно общедоступное свойство с непригодным получателем и одним закрытым свойством для внутреннего использования. Полный пример:

 class Example { // for internal use private var _listener: (() -> Unit)? = null // public set-only var listener: (() -> Unit)? @Deprecated(message = "set-only", level = DeprecationLevel.ERROR) get() = throw AssertionError() // unusable getter set(value) { _listener = value } // write-through setter fun somethingHappend() { _listener?.invoke() } } 
Intereting Posts