代码预览
val darkMode = SPool.isDarkMode
SPool.isDarkMode = !SPool.isDarkMode
详细代码
object SPool {
var isDarkMode by SPDelegate("isDarkMode", false)
var userName by SPDelegate("userName", "")
}
import com.blankj.utilcode.util.SPUtils
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