diff --git a/Sources/Persist/UserDefaults/Persisted+UserDefaults.swift b/Sources/Persist/UserDefaults/Persisted+UserDefaults.swift index 27adb5e..02f4bab 100644 --- a/Sources/Persist/UserDefaults/Persisted+UserDefaults.swift +++ b/Sources/Persist/UserDefaults/Persisted+UserDefaults.swift @@ -11,18 +11,21 @@ extension Persisted where Value: StorableInUserDefaults { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValue: The value to use when a value has not yet been stored, or an error occurs. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ public init( key: String, storedBy userDefaults: UserDefaults, + cacheValue: Bool = false, defaultValue: @autoclosure @escaping () -> Value, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) { self.init( key: key, userDefaults: userDefaults, + cacheValue: cacheValue, defaultValue: defaultValue(), defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -35,17 +38,20 @@ extension Persisted where Value: StorableInUserDefaults { - parameter wrappedValue: The value to use when a value has not yet been stored, or an error occurs. - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ public init( wrappedValue: Value, key: String, storedBy userDefaults: UserDefaults, + cacheValue: Bool = false, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) { self.init( key: key, userDefaults: userDefaults, + cacheValue: cacheValue, defaultValue: wrappedValue, defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -57,12 +63,14 @@ extension Persisted where Value: StorableInUserDefaults { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValue: The value to use when a value has not yet been stored, or an error occurs. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ public init( key: String, userDefaults: UserDefaults, + cacheValue: Bool = false, defaultValue: @autoclosure @escaping () -> Value, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) { @@ -70,6 +78,7 @@ extension Persisted where Value: StorableInUserDefaults { key: key, storedBy: UserDefaultsStorage(userDefaults: userDefaults), transformer: StorableInUserDefaultsTransformer(), + cacheValue: cacheValue, defaultValue: defaultValue(), defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -82,18 +91,21 @@ extension Persisted where Value: StorableInUserDefaults { - parameter wrappedValue: The value to use when a value has not yet been stored, or an error occurs. - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ public init( wrappedValue: Value, key: String, userDefaults: UserDefaults, + cacheValue: Bool = false, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) { self.init( key: key, storedBy: UserDefaultsStorage(userDefaults: userDefaults), transformer: StorableInUserDefaultsTransformer(), + cacheValue: cacheValue, defaultValue: wrappedValue, defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -111,18 +123,21 @@ extension Persisted { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValue: The value to use when a value has not yet been stored, or an error occurs. Defaults to `nil`. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ public init( key: String, storedBy userDefaults: UserDefaults, + cacheValue: Bool = false, defaultValue: @autoclosure @escaping () -> Value = nil, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) where WrappedValue: StorableInUserDefaults, Value == WrappedValue? { self.init( key: key, userDefaults: userDefaults, + cacheValue: cacheValue, defaultValue: defaultValue(), defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -135,17 +150,20 @@ extension Persisted { - parameter wrappedValue: The value to use when a value has not yet been stored, or an error occurs. - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ public init( wrappedValue: Value, key: String, storedBy userDefaults: UserDefaults, + cacheValue: Bool = false, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) where WrappedValue: StorableInUserDefaults, Value == WrappedValue? { self.init( key: key, userDefaults: userDefaults, + cacheValue: cacheValue, defaultValue: wrappedValue, defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -157,12 +175,14 @@ extension Persisted { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValue: The value to use when a value has not yet been stored, or an error occurs. Defaults to `nil`. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ public init( key: String, userDefaults: UserDefaults, + cacheValue: Bool = false, defaultValue: @autoclosure @escaping () -> Value = nil, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) where WrappedValue: StorableInUserDefaults, Value == WrappedValue? { @@ -170,6 +190,7 @@ extension Persisted { key: key, storedBy: UserDefaultsStorage(userDefaults: userDefaults), transformer: StorableInUserDefaultsTransformer(), + cacheValue: cacheValue, defaultValue: defaultValue(), defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -182,18 +203,21 @@ extension Persisted { - parameter wrappedValue: The value to use when a value has not yet been stored, or an error occurs. - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ public init( wrappedValue: Value, key: String, userDefaults: UserDefaults, + cacheValue: Bool = false, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) where WrappedValue: StorableInUserDefaults, Value == WrappedValue? { self.init( key: key, storedBy: UserDefaultsStorage(userDefaults: userDefaults), transformer: StorableInUserDefaultsTransformer(), + cacheValue: cacheValue, defaultValue: wrappedValue, defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -211,6 +235,7 @@ extension Persisted { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. - parameter transformer: A transformer to transform the value before being persisted and after being retrieved from the storage + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValue: The value to use when a value has not yet been stored, or an error occurs. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ @@ -218,6 +243,7 @@ extension Persisted { key: String, storedBy userDefaults: UserDefaults, transformer: Transformer, + cacheValue: Bool = false, defaultValue: @autoclosure @escaping () -> Value, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) where Transformer.Input == Value, Transformer.Output: StorableInUserDefaults { @@ -225,6 +251,7 @@ extension Persisted { key: key, userDefaults: userDefaults, transformer: transformer, + cacheValue: cacheValue, defaultValue: defaultValue(), defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -240,6 +267,7 @@ extension Persisted { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. - parameter transformer: A transformer to transform the value before being persisted and after being retrieved from the storage + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter wrappedValue: The value to use when a value has not yet been stored, or an error occurs. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ @@ -248,12 +276,14 @@ extension Persisted { key: String, storedBy userDefaults: UserDefaults, transformer: Transformer, + cacheValue: Bool = false, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) where Transformer.Input == Value, Transformer.Output: StorableInUserDefaults { self.init( key: key, userDefaults: userDefaults, transformer: transformer, + cacheValue: cacheValue, defaultValue: wrappedValue, defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -269,6 +299,7 @@ extension Persisted { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. - parameter transformer: A transformer to transform the value before being persisted and after being retrieved from the storage + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValue: The value to use when a value has not yet been stored, or an error occurs. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ @@ -276,6 +307,7 @@ extension Persisted { key: String, userDefaults: UserDefaults, transformer: Transformer, + cacheValue: Bool = false, defaultValue: @autoclosure @escaping () -> Value, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) where Transformer.Input == Value, Transformer.Output: StorableInUserDefaults { @@ -284,6 +316,7 @@ extension Persisted { key: key, storedBy: UserDefaultsStorage(userDefaults: userDefaults), transformer: aggregateTransformer, + cacheValue: cacheValue, defaultValue: defaultValue(), defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -300,6 +333,7 @@ extension Persisted { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. - parameter transformer: A transformer to transform the value before being persisted and after being retrieved from the storage + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ public init( @@ -307,6 +341,7 @@ extension Persisted { key: String, userDefaults: UserDefaults, transformer: Transformer, + cacheValue: Bool = false, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) where Transformer.Input == Value, Transformer.Output: StorableInUserDefaults { let aggregateTransformer = transformer.append(transformer: StorableInUserDefaultsTransformer()) @@ -314,6 +349,7 @@ extension Persisted { key: key, storedBy: UserDefaultsStorage(userDefaults: userDefaults), transformer: aggregateTransformer, + cacheValue: cacheValue, defaultValue: wrappedValue, defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -331,6 +367,7 @@ extension Persisted { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. - parameter transformer: A transformer to transform the value before being persisted and after being retrieved from the storage + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValue: The value to use when a value has not yet been stored, or an error occurs. Defaults to `nil`. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ @@ -338,6 +375,7 @@ extension Persisted { key: String, storedBy userDefaults: UserDefaults, transformer: Transformer, + cacheValue: Bool = false, defaultValue: @autoclosure @escaping () -> Value = nil, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) where Transformer.Input == WrappedValue, Transformer.Output: StorableInUserDefaults, Value == WrappedValue? { @@ -345,6 +383,7 @@ extension Persisted { key: key, userDefaults: userDefaults, transformer: transformer, + cacheValue: cacheValue, defaultValue: defaultValue(), defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -361,6 +400,7 @@ extension Persisted { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. - parameter transformer: A transformer to transform the value before being persisted and after being retrieved from the storage + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ public init( @@ -368,12 +408,14 @@ extension Persisted { key: String, storedBy userDefaults: UserDefaults, transformer: Transformer, + cacheValue: Bool = false, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) where Transformer.Input == WrappedValue, Transformer.Output: StorableInUserDefaults, Value == WrappedValue? { self.init( key: key, userDefaults: userDefaults, transformer: transformer, + cacheValue: cacheValue, defaultValue: wrappedValue, defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -389,6 +431,7 @@ extension Persisted { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. - parameter transformer: A transformer to transform the value before being persisted and after being retrieved from the storage + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValue: The value to use when a value has not yet been stored, or an error occurs. Defaults to `nil`. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ @@ -396,6 +439,7 @@ extension Persisted { key: String, userDefaults: UserDefaults, transformer: Transformer, + cacheValue: Bool = false, defaultValue: @autoclosure @escaping () -> Value = nil, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) where Transformer.Input == WrappedValue, Transformer.Output: StorableInUserDefaults, Value == WrappedValue? { @@ -404,6 +448,7 @@ extension Persisted { key: key, storedBy: UserDefaultsStorage(userDefaults: userDefaults), transformer: aggregateTransformer, + cacheValue: cacheValue, defaultValue: defaultValue(), defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -420,6 +465,7 @@ extension Persisted { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. - parameter transformer: A transformer to transform the value before being persisted and after being retrieved from the storage + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ public init( @@ -427,6 +473,7 @@ extension Persisted { key: String, userDefaults: UserDefaults, transformer: Transformer, + cacheValue: Bool = false, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) where Transformer.Input == WrappedValue, Transformer.Output: StorableInUserDefaults, Value == WrappedValue? { let aggregateTransformer = transformer.append(transformer: StorableInUserDefaultsTransformer()) @@ -434,6 +481,7 @@ extension Persisted { key: key, storedBy: UserDefaultsStorage(userDefaults: userDefaults), transformer: aggregateTransformer, + cacheValue: cacheValue, defaultValue: wrappedValue, defaultValuePersistBehaviour: defaultValuePersistBehaviour ) diff --git a/Sources/Persist/UserDefaults/Persister+UserDefaults.swift b/Sources/Persist/UserDefaults/Persister+UserDefaults.swift index 4466e62..b031bf9 100644 --- a/Sources/Persist/UserDefaults/Persister+UserDefaults.swift +++ b/Sources/Persist/UserDefaults/Persister+UserDefaults.swift @@ -11,18 +11,21 @@ extension Persister where Value: StorableInUserDefaults { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValue: The value to use when a value has not yet been stored, or an error occurs. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ public convenience init( key: String, storedBy userDefaults: UserDefaults, + cacheValue: Bool = false, defaultValue: @autoclosure @escaping () -> Value, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) { self.init( key: key, userDefaults: userDefaults, + cacheValue: cacheValue, defaultValue: defaultValue(), defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -34,12 +37,14 @@ extension Persister where Value: StorableInUserDefaults { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValue: The value to use when a value has not yet been stored, or an error occurs. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ public convenience init( key: String, userDefaults: UserDefaults, + cacheValue: Bool = false, defaultValue: @autoclosure @escaping () -> Value, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) { @@ -47,6 +52,7 @@ extension Persister where Value: StorableInUserDefaults { key: key, storedBy: UserDefaultsStorage(userDefaults: userDefaults), transformer: StorableInUserDefaultsTransformer(), + cacheValue: cacheValue, defaultValue: defaultValue(), defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -64,18 +70,21 @@ extension Persister { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValue: The value to use when a value has not yet been stored, or an error occurs. Defaults to `nil`. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ public convenience init( key: String, storedBy userDefaults: UserDefaults, + cacheValue: Bool = false, defaultValue: @autoclosure @escaping () -> Value = nil, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) where WrappedValue: StorableInUserDefaults, Value == WrappedValue? { self.init( key: key, userDefaults: userDefaults, + cacheValue: cacheValue, defaultValue: defaultValue(), defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -87,12 +96,14 @@ extension Persister { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValue: The value to use when a value has not yet been stored, or an error occurs. Defaults to `nil`. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ public convenience init( key: String, userDefaults: UserDefaults, + cacheValue: Bool = false, defaultValue: @autoclosure @escaping () -> Value = nil, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) where WrappedValue: StorableInUserDefaults, Value == WrappedValue? { @@ -100,6 +111,7 @@ extension Persister { key: key, storedBy: UserDefaultsStorage(userDefaults: userDefaults), transformer: StorableInUserDefaultsTransformer(), + cacheValue: cacheValue, defaultValue: defaultValue(), defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -117,6 +129,7 @@ extension Persister { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. - parameter transformer: A transformer to transform the value before being persisted and after being retrieved from the storage + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValue: The value to use when a value has not yet been stored, or an error occurs. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ @@ -124,6 +137,7 @@ extension Persister { key: String, storedBy userDefaults: UserDefaults, transformer: Transformer, + cacheValue: Bool = false, defaultValue: @autoclosure @escaping () -> Value, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) where Transformer.Input == Value, Transformer.Output: StorableInUserDefaults { @@ -131,6 +145,7 @@ extension Persister { key: key, userDefaults: userDefaults, transformer: transformer, + cacheValue: cacheValue, defaultValue: defaultValue(), defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -146,6 +161,7 @@ extension Persister { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. - parameter transformer: A transformer to transform the value before being persisted and after being retrieved from the storage + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValue: The value to use when a value has not yet been stored, or an error occurs. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ @@ -153,6 +169,7 @@ extension Persister { key: String, userDefaults: UserDefaults, transformer: Transformer, + cacheValue: Bool = false, defaultValue: @autoclosure @escaping () -> Value, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) where Transformer.Input == Value, Transformer.Output: StorableInUserDefaults { @@ -161,6 +178,7 @@ extension Persister { key: key, storedBy: UserDefaultsStorage(userDefaults: userDefaults), transformer: aggregateTransformer, + cacheValue: cacheValue, defaultValue: defaultValue(), defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -178,6 +196,7 @@ extension Persister { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. - parameter transformer: A transformer to transform the value before being persisted and after being retrieved from the storage + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValue: The value to use when a value has not yet been stored, or an error occurs. Defaults to `nil`. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ @@ -185,6 +204,7 @@ extension Persister { key: String, storedBy userDefaults: UserDefaults, transformer: Transformer, + cacheValue: Bool = false, defaultValue: @autoclosure @escaping () -> Value = nil, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) where Transformer.Input == WrappedValue, Transformer.Output: StorableInUserDefaults, Value == WrappedValue? { @@ -192,6 +212,7 @@ extension Persister { key: key, userDefaults: userDefaults, transformer: transformer, + cacheValue: cacheValue, defaultValue: defaultValue(), defaultValuePersistBehaviour: defaultValuePersistBehaviour ) @@ -207,6 +228,7 @@ extension Persister { - parameter key: The key to store the value against - parameter userDefaults: The user defaults to use to persist and retrieve the value. - parameter transformer: A transformer to transform the value before being persisted and after being retrieved from the storage + - parameter cacheValue: When `true` the latest value will be cached in memory to improve performance when retrieving values, at the cost of increased memory usage. - parameter defaultValue: The value to use when a value has not yet been stored, or an error occurs. Defaults to `nil`. - parameter defaultValuePersistBehaviour: An option set that describes when to persist the default value. Defaults to `[]`. */ @@ -214,6 +236,7 @@ extension Persister { key: String, userDefaults: UserDefaults, transformer: Transformer, + cacheValue: Bool = false, defaultValue: @autoclosure @escaping () -> Value = nil, defaultValuePersistBehaviour: DefaultValuePersistOption = [] ) where Transformer.Input == WrappedValue, Transformer.Output: StorableInUserDefaults, Value == WrappedValue? { @@ -222,6 +245,7 @@ extension Persister { key: key, storedBy: UserDefaultsStorage(userDefaults: userDefaults), transformer: aggregateTransformer, + cacheValue: cacheValue, defaultValue: defaultValue(), defaultValuePersistBehaviour: defaultValuePersistBehaviour )