Kotlin对SP使用的封装

为了更易于使用SharedPreferences,使用Koltin的委托模式来对SP进行封装

1. 定义委托类

class Preference<T>(private val key: String, private val default: T): ReadWriteProperty<Any?, T> {

    private val prefs: SharedPreferences by lazy { MyApp.instance!!.applicationContext.getSharedPreferences("SP", Context.MODE_PRIVATE) }

    override fun getValue(thisRef: Any?, property: KProperty<*>): T {
        return with(prefs) {
            when(default) {
                is Int -> getInt(key, default)
                is Float -> getFloat(key, default)
                is Long -> getLong(key, default)
                is Boolean -> getBoolean(key, default)
                is String -> getString(key, default)
                else -> throw IllegalArgumentException("SharedPreference can't be get this type")
            } as T
        }

    }

    override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
        with(prefs.edit()) {
            when(value) {
                is Int -> putInt(key, value)
                is Float -> putFloat(key, value)
                is Long -> putLong(key, value)
                is Boolean -> putBoolean(key, value)
                is String -> putString(key, value)
                else -> throw IllegalArgumentException("SharedPreference can't be save this type")
            }.apply()
        }
    }

}

2.简单使用

/**
  * 是否显示引导页
*/
var guideEnable by Preference("guideEnable", true)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,026评论 3 119
  • 角色 从出生到死去,我们都扮演着不同的角色。还时时刻刻不忘去模仿他人的角色,最终活成了连自己都不喜欢的样子。 在很...
    易秒阅读 418评论 1 1
  • Markdown基本语法总结 一、标题 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 使用 # 号表...
    冰雪_8944阅读 294评论 0 0
  • 哥哥,我已经知道这件事情以及我们之间这样结果的原因。突然间明白了这样一个真理,我们不知道,不明白的,我们就不要采取...
    木兰姑娘阅读 141评论 0 0
  • 前些日子,小姨家的孩子们刚刚结束了补课,来家里玩并小住些时日。这下家里可热闹了,平时小妹在家还写写作业,这下妹妹弟...
    车马日色慢的从前阅读 397评论 0 1