Skip to content

Instantly share code, notes, and snippets.

@Urdzik
Created April 25, 2021 04:59
Show Gist options
  • Save Urdzik/4423b5355d23397fb6d032823751c76c to your computer and use it in GitHub Desktop.
Save Urdzik/4423b5355d23397fb6d032823751c76c to your computer and use it in GitHub Desktop.
Kotlin Delegated (SharedPreferences)
fun SharedPreferences.string(
defaultValue: String = "",
key: (KProperty<*>) -> String = KProperty<*>::name
): ReadWriteProperty<Any, String> =
object : ReadWriteProperty<Any, String> {
override fun getValue(
thisRef: Any,
property: KProperty<*>
) = getString(key(property), defaultValue)
override fun setValue(
thisRef: Any,
property: KProperty<*>,
value: String
) = edit().putString(key(property), value).apply()
}
fun SharedPreferences.stringNullable(
defaultValue: String? = null,
key: (KProperty<*>) -> String = KProperty<*>::name
): ReadWriteProperty<Any, String?> =
object : ReadWriteProperty<Any, String?> {
override fun getValue(
thisRef: Any,
property: KProperty<*>
) = getString(key(property), defaultValue)
override fun setValue(
thisRef: Any,
property: KProperty<*>,
value: String?
) = edit().putString(key(property), value).apply()
}
fun SharedPreferences.int(
defaultValue: Int = 0,
key: (KProperty<*>) -> String = KProperty<*>::name
): ReadWriteProperty<Any, Int> =
object : ReadWriteProperty<Any, Int> {
override fun getValue(
thisRef: Any,
property: KProperty<*>
) = getInt(key(property), defaultValue)
override fun setValue(
thisRef: Any,
property: KProperty<*>,
value: Int
) = edit().putInt(key(property), value).apply()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment