mirror of
https://github.com/luxfhe/example-ios-demo.git
synced 2026-10-30 18:13:24 +00:00
This app is ZAMA's BSD 3-Clause Clear demo. The license requires its notices to survive redistribution, and a rebrand had replaced every one of them with ours: the LICENSE text, 66 source headers and the app's copyright string. They are back, each with our line beside it for our changes. Co-authored-by: Hanzo Dev <[email protected]>
36 lines
994 B
Swift
36 lines
994 B
Swift
// Copyright © 2025 Zama. All rights reserved.
|
|
// Copyright © 2025 Lux Industries Inc.
|
|
|
|
import Foundation
|
|
|
|
@propertyWrapper
|
|
struct UserDefaultsStorage<T> {
|
|
let key: String
|
|
let defaultValue: T
|
|
private let defaults = UserDefaults.standard
|
|
|
|
var wrappedValue: T {
|
|
get {
|
|
defaults.object(forKey: key) as? T ?? defaultValue
|
|
}
|
|
set {
|
|
// Check whether we're dealing with an optional and remove the object if the new value is nil.
|
|
if let optional = newValue as? AnyOptional, optional.isNil {
|
|
defaults.removeObject(forKey: key)
|
|
} else {
|
|
defaults.set(newValue, forKey: key)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Allows to match for optionals with generics that are defined as non-optional.
|
|
public protocol AnyOptional {
|
|
/// Returns `true` if `nil`, otherwise `false`.
|
|
var isNil: Bool { get }
|
|
}
|
|
|
|
extension Optional: AnyOptional {
|
|
public var isNil: Bool { self == nil }
|
|
}
|