tgoop.com/mobileproglib/5721
Create:
Last Update:
Last Update:
💻 How to: реализовать кастомный делегат
Чтобы написать кастомный делегат, нужно определить класс, который реализует интерфейс ReadOnlyProperty
для делегата val
или ReadWriteProperty
для делегата var.
Классы, реализующие ReadOnlyProperty
и ReadWriteProperty
, содержат два метода:
• getValue(thisRef: T, property: KProperty<*>): R,
который должен возвращать значение свойства.
• setValue(thisRef: T, property: KProperty<*>, value: R)
, который должен устанавливать значение свойства.
Например, рассмотрим создание кастомного делегата для логирования изменения значения свойства:
class LoggingDelegate(private var value: T) : ReadWriteProperty {override fun getValue(thisRef: Any?, property: KProperty): T {println(«Getting value of ${property.name}: $value»)return value}override fun setValue(thisRef: Any?, property: KProperty, value: T) {println(«Setting value of ${property.name} to $value»)this.value = value}}
Здесь мы определяем класс
LoggingDelegate
, который реализует интерфейс ReadWriteProperty
. Метод getValue
выводит в консоль текущее значение свойства и возвращает его, а метод setValue
выводит новое значение свойства в консоль и сохраняет его в переменной value
.Затем мы можем использовать наш кастомный делегат следующим образом:
class MyClass {var myProperty: Int by LoggingDelegate(0)}fun main() {val obj = MyClass()obj.myProperty = 42 // Setting value of myProperty to 42println(obj.myProperty) // Getting value of myProperty: 42}
Здесь мы создаем экземпляр класса
MyClass
, который содержит свойство myProperty
, использующее наш кастомный делегат LoggingDelegate
. При установке значения свойства или получении его значения будут вызываться соответствующие методы нашего делегата, и мы увидим соответствующие сообщения в консоли.👉 Подробнее в статье
Библиотека мобильного разработчика #буст
BY Библиотека мобильного разработчика | Android, iOS, Swift, Retrofit, Moshi, Chuck
Share with your friend now:
tgoop.com/mobileproglib/5721