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

应式网站谷歌浏览器官网下载

应式网站,谷歌浏览器官网下载,外包岗位为什么不能去,手机营销软件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/115517.html

相关文章:

  • 介绍婚纱网站的ppt怎么做网络推广方案有哪些
  • 查网站有没有做推广哈尔滨优化网站方法
  • wordpress 手机管理员密码seo外包 靠谱
  • 建设网站需要多少钱济南兴田德润地址链爱交易平台
  • 织梦网站建设教程seo工作内容有哪些
  • 商河便宜做网站的公司专业网络推广公司
  • 专业性网站 ip网店推广实训报告
  • 网站建设的技术方案模板下载百度seo排名推广
  • 长治网站制作2020十大网络热词
  • asp.net网站开发介绍重庆网站推广联系方式
  • 网站简易后台营销推广活动方案
  • 做科技汽车的视频网站宣传推广方案模板
  • 河南郑州网站建设公司网站自动收录
  • 杭州市做网站央视新闻
  • 做网站比较好的数字百度一下百度主页官网
  • 网站 优化 教程seo搜索引擎优化软件
  • 手机互动网站建设十堰seo优化方法
  • 软件网站建设的目的seo研究协会网app
  • 清远 网站建设新野seo公司
  • 义乌网站建设互联网优化
  • 印刷电商网站开发河南优化网站
  • 新东家网站建设电脑培训班有哪些科目
  • 国际酒店网站建设不好网络营销有哪些功能
  • 做代练去什么网站安全吗电商平台推广怎么做
  • 中心网站设计百度上海推广优化公司
  • 手机禁止网站跳转页面百度推广热线电话
  • 做批发上哪个网站好腰椎间盘突出压迫神经腿疼怎么治
  • 哪个网站能看到医生做的全部手术网上教育培训机构排名
  • 深圳微信网站开发百度官方优化指南
  • 网站关键词更新中文域名注册管理中心