用kotlin简化SharedPreferences的使用

205 阅读1分钟

代码预览

val darkMode = SPool.isDarkMode // 读取结果: false
SPool.isDarkMode = !SPool.isDarkMode // 写入结果: true

详细代码

object SPool {
    // 在此添加需要持久化的变量
    var isDarkMode by SPDelegate("isDarkMode", false)
    var userName by SPDelegate("userName", "")
}
import com.blankj.utilcode.util.SPUtils
/** SharedPreferences代理类 */
class SPDelegate<T>(private val key: String, private val defaultValue: T) : ReadWriteProperty<Any?, T> {
    override fun getValue(thisRef: Any?, property: KProperty<*>): T {
        return when (defaultValue) {
            is Int -> SPUtils.getInstance().getInt(key, defaultValue)
            is Long -> SPUtils.getInstance().getLong(key, defaultValue)
            is Float -> SPUtils.getInstance().getFloat(key, defaultValue)
            is Boolean -> SPUtils.getInstance().getBoolean(key, defaultValue)
            is String -> SPUtils.getInstance().getString(key, defaultValue)
            is Set<*> -> SPUtils.getInstance().getStringSet(key, defaultValue as? Set<String>)
            else -> ""
        } as T
    }

    override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
        when (value) {
            is Int -> SPUtils.getInstance().put(key, value)
            is Long -> SPUtils.getInstance().put(key, value)
            is Float -> SPUtils.getInstance().put(key, value)
            is Boolean -> SPUtils.getInstance().put(key, value)
            is String -> SPUtils.getInstance().put(key, value)
            is Set<*> -> SPUtils.getInstance().put(key, value.map { it.toString() }.toHashSet())
            else -> ""
        }
    }
}

引用: Kotlin | 利用by委托机制封装SharedPreferenc