当前位置: 首页 > wzjs >正文

网站制作 ?B?T营销渠道分为三种模式

网站制作 ?B?T,营销渠道分为三种模式,中国网站建设服务中心,怎么样建设一个网站Kotlin 的 Delegates.observable 是 Kotlin 标准库中提供的一个属性委托,它允许你在属性的值发生变化时自动执行某段逻辑,比如常用于监听属性变化(例如 UI 数据更新)。 基本使用示例: import kotlin.properties.Delega…

Kotlin 的 Delegates.observable 是 Kotlin 标准库中提供的一个属性委托,它允许你在属性的值发生变化时自动执行某段逻辑,比如常用于监听属性变化(例如 UI 数据更新)。

基本使用示例:

import kotlin.properties.Delegatesvar name: String by Delegates.observable("initial") { property, oldValue, newValue ->println("${property.name} changed from $oldValue to $newValue")
}fun main() {name = "Alice"name = "Bob"
}

输出:

name changed from initial to Alice
name changed from Alice to Bob

实现原理

1. Delegates.observable(...) 返回了一个实现了 ReadWriteProperty 接口的对象:
public inline fun <T> observable(initialValue: T, crossinline onChange: (property: KProperty<*>, oldValue: T, newValue: T) -> Unit):ReadWriteProperty<Any?, T> =object : ObservableProperty<T>(initialValue) {override fun afterChange(property: KProperty<*>, oldValue: T, newValue: T) = onChange(property, oldValue, newValue)}

它返回了一个 ObservableProperty 实例。

2. ObservableProperty 实现了属性委托接口ReadWriteProperty
public abstract class ObservableProperty<V>(initialValue: V) : ReadWriteProperty<Any?, V> {private var value = initialValueprotected open fun beforeChange(property: KProperty<*>, oldValue: V, newValue: V): Boolean = trueprotected open fun afterChange(property: KProperty<*>, oldValue: V, newValue: V): Unit {}public override fun getValue(thisRef: Any?, property: KProperty<*>): V {return value}public override fun setValue(thisRef: Any?, property: KProperty<*>, value: V) {val oldValue = this.valueif (!beforeChange(property, oldValue, value)) {return}this.value = valueafterChange(property, oldValue, value)}override fun toString(): String = "ObservableProperty(value=$value)"
}

beforeChange在属性值被变更前被调用,默认返回true,就是说即使你写出这样的代码:

import kotlin.properties.Delegatesvar name: String by Delegates.observable("init") { property, oldValue, newValue ->println("${property.name} changed from $oldValue to $newValue")
}fun main() {name = "init"name = "Bob"
}

也会输出结果:

name changed from init to init
name changed from init to Bob

ObservableProperty内部维护了属性值,并在 setValue 方法中触发回调,这个回调的实现就是我们传入的lambda参数onChange

每次我们通过赋值等操作修改被委托的属性时,都会触发 setValue() 方法,从而调用 onChange 回调。

总结:工作机制

  1. Delegates.observable(initialValue, onChange) 返回 ObservableProperty 实例
  2. ObservableProperty 实现了 ReadWriteProperty 接口
  3. Kotlin 编译器在 by 后会将属性访问转发给 getValue()setValue()
  4. setValue() 中自动触发 onChange() 回调

使用场景

  • 数据绑定(如 UI)
  • 表单输入监听
  • MVVM 架构中 ViewModel 属性监听
  • 日志审计、调试属性变化等
http://www.dtcms.com/wzjs/24951.html

相关文章:

  • 手机上的网站和pc机上的网站的区别百度一下百度搜索网站
  • 网站可以换虚拟主机吗网络营销活动策划方案模板
  • 秦皇岛 网站建设刷关键词的平台
  • 闵行网站建设外包企业网站推广建议
  • 浙江省建设部网站seo在哪可以学
  • dw做的网站成品大学生网页设计主题
  • 网站预算营业推广的方式
  • 网站建设分为哪些打开一个网站
  • 福州做网站建设公司百度代理合作平台
  • 私人网站建设步骤品牌搜索引擎服务优化
  • 网页设计实验报告3000字成都关键词优化平台
  • 用凡科做的网站要钱吗百度推广优化工具
  • 建筑模板的作用seo软文是什么意思
  • 长沙做模板网站媒体网站
  • 做搜索的网站抖音十大搜索关键词
  • 网站认证打的钱怎么做分录深圳网站建设推广优化公司
  • 网站权限怎么设置方法百度一下你就知道网页
  • 个人网站可以做社区吗自己怎么制作网站
  • wordpress浮动导航菜单成都谷歌seo
  • 个体户做网站有用吗网络整合营销策划书
  • 中国建设工程鲁班奖查询网站南京网站设计公司大全
  • 中国钓鱼网站大全百度指数查询平台
  • ppt模板如何制作安卓优化软件
  • vultr搭建wordpress公司排名seo
  • 网站正则表达式怎么做淘宝关键词热度查询工具
  • 专业网站建设制作网页的代码
  • 响应式设计的网站制作网站要多少费用
  • 深圳网站建设联系电话知乎关键词搜索
  • 杭州品牌网站品牌维护
  • 网络小说网站推广策划方案网站推广建设