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
true
the value of the property is being set to the new value, and if the callback returnsfalse
the new value is discarded and the property remains its old value.即如果返回
true
那么属性可以赋值成新的值,如果返回的是false
那么属性将依然维持旧的值,无法变成新的值。
网友评论