Kotlin Delegates in Android: Utilizing the power of Delegated Properties in Android development — статья о делегированных свойствах в Kotlin и о том, как их можно применять при разработке для Android.
РЕКОМЕНДУЕМ:
Полезные советы разработчику на языке Kotlin
Делегированные свойства — это поля класса (или глобальные переменные), обращение к которым вызовет код специального класса-делегата. Простейший пример использования делегированных свойств будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class TrimDelegate : ReadWriteProperty<Any?, String> { private var trimmedValue: String = "" override fun getValue( thisRef: Any?, property: KProperty<*> ): String { return trimmedValue } override fun setValue( thisRef: Any?, property: KProperty<*>, value: String ) { trimmedValue = value.trim() } } |
Все, что делает этот класс-делегат, — триммит строку (отбрасывает начальные и конечные пробелы), записанную в переменную. Далее, если объявить переменную, используя этот класс-делегат, записанные в нее строки будут автоматически триммиться:
1 2 |
var param: String by TrimDelegate() param = " string " |
В Android делегированные свойства очень удобно использовать для обращения к опциям с помощью SharedPreferences. Просто создай следующую функцию-расширение для класса SharedPreferences:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
fun SharedPreferences.string( defaultValue: String = "", key: (KProperty<*>) -> String = KProperty<*>::name ): ReadWriteProperty<Any, String> = object : ReadWriteProperty<Any, String> { override fun getValue( thisRef: Any, property: KProperty<*> ) = getString(key(property), defaultValue) override fun setValue( thisRef: Any, property: KProperty<*>, value: String ) = edit().putString(key(property), value).apply() } |
Объяви переменную, которая будет привязана к нужной опции, и просто записывай/читай значения. Они будут автоматически сохранены в файл настроек:
1 2 3 4 5 6 |
var option3 by prefs.string( key = { "option3" }, defaultValue = "default" ) option3 = "new_value" |
РЕКОМЕНДУЕМ:
Различия между val и const val в Kotlin