内容简介
前面讲解了 Kotlin 具有类委托和属性委托。接下来我给大家分享 1 个实战技巧,使用属性委托来完成 SharedPreferences 的封装。
前景介绍
说起 SharedPreferences
在 Android
中是一种常用的本地化存储数据的方案。 以前 Java
封装都是将 SharedPreferences
封装成单利,原因就是 SharedPreferences
对象创建过程会解析 xml
文件,这个过程比较耗性能,因此我们常定义一个单利让其对象在整个应用生命周期中只有一个。
然后就是暴露对应类型的 put
& get
方法。并且每次需要存储值的时候,都要在一个 常量类
中定义 KEY
,每次 get
的时候,还需要查找对应的 KEY
值。
Kotlin
如何封装呢?能不能解决上面的问题呢?哈哈,当然可以,不得不说 Kotlin
的委托机制再一次刷新了我的认知。
代码封装
object SharedPreferencesUtils {
/**
* 创建 SharedPreferences 对象
*/
var preferences: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(App.context)
}
/**
* 定义类型 属性委托类
*/
private object SharedPreferenceDelegates {
/**
* 定义委托获取和设置对应类型的方法
* 委托的原理,大家可以看我前面的文章
*/
fun int(defaultValue: Int = 0) = object : ReadWriteProperty<SharedPreferencesUtils, Int> {
override fun getValue(thisRef: SharedPreferencesUtils, property: KProperty<*>): Int {
/**
* 当获取值的时候,调用此方法
* key 值是对应变量的昵称
*/
return thisRef.preferences.getInt(property.name, defaultValue)
}
override fun setValue(thisRef: SharedPreferencesUtils, property: KProperty<*>, value: Int) {
/**
* 当设置值的时候,调用此方法
* key 值是对应变量的昵称
*/