Commit ce4d4d32 by Demid Merzlyakov

IOS-80: cache user defaults last known valus to avoid unarchiving it every time.

parent 590e2b08
......@@ -11,6 +11,10 @@ import Foundation
struct UserDefaultsUnitValue<T> {
var wrappedValue: T {
get {
// TODO: If we will ever have 2 instances of UserDefaultsUnitValue with the same key at the same time, this cache will become desynchronized.
if let knownValue = lastKnownValue {
return knownValue
}
guard
let data = UserDefaults.standard.data(forKey: key),
let decoded = NSKeyedUnarchiver.unarchiveObject(with: data) as? T
......@@ -21,7 +25,7 @@ struct UserDefaultsUnitValue<T> {
return decoded
}
set {
lastKnownValue = newValue
let data = NSKeyedArchiver.archivedData(withRootObject: newValue)
UserDefaults.standard.set(data, forKey: key)
UserDefaults.standard.synchronize()
......@@ -34,6 +38,7 @@ struct UserDefaultsUnitValue<T> {
private let key: String
private let defaultValue: T
private var lastKnownValue: T?
init(wrappedValue defaultValue:T, key:String) {
self.defaultValue = defaultValue
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment