
首发于公众号: DSGtalk1989
17.可观察属性
-
observable
任何用
var形容的可变属性都可以对其进行观察(当然用val修饰的属性进行观察也不会报错,但是将变得毫无意义)一般观察属性的格式如下
var name: String by Delegates.observable("<no name>") { property, oldValue, newValue -> println("$property : $oldValue -> $newValue") }通过
by Delegates.observable的形式进行观察,第一参数传入的是默认值,第二个参数用lambda表达式,三个参数分别对应的是property观察属性的类型,oldValue旧的值,和newValue新的值 -
vetoable
用作拦截,跟上面的
observable来说唯一的不同是,上面的observable后面的lambda表达式返回的是Unit,即只是把3个参数回调给你让你知道的。而vetoable的lambda需要的是返回一个Boolean类型。If the callback returns
truethe value of the property is being set to the new value, and if the callback returnsfalsethe new value is discarded and the property remains its old value.即如果返回
true那么属性可以赋值成新的值,如果返回的是false那么属性将依然维持旧的值,无法变成新的值。