/
sberpay
/
AgeGate-iOS
Обзор
Документация
Войти
/
sberpay
/
AgeGate-iOS
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
develop
AgeGateExample/UserDefaultWrapper/UserDefaultWrapper.swift
55 строк
1 KB
SergeyGladkiy
[0.2.0] БДСЧ сценарий
30 июл 2026, 21:57
30 июл 2026, 21:57
cbcdfcb
Код
Авторство
О чём код?
// // UserDefaultWrapper.swift // SPaySdkExample // // Created by Ипатов Александр Станиславович on 25.05.2023. // import Foundation extension Encodable { var data: Data? { try? JSONEncoder().encode(self) } } extension Data { func decode<T: Codable>(to type: T.Type) -> T? { try? JSONDecoder().decode(T.self, from: self) } } protocol AnyOptional { var isNil: Bool { get } } extension Optional: AnyOptional { var isNil: Bool { self == nil } } @propertyWrapper struct UserDefault<Value: Codable> { let key: String let defaultValue: Value var container: UserDefaults = .standard var wrappedValue: Value { get { let data = container.object(forKey: key) as? Data ?? Data() return data.decode(to: Value.self) ?? defaultValue } set { if let optional = newValue as? AnyOptional, optional.isNil { container.removeObject(forKey: key) } else { guard let data = newValue.data else { return } container.set(data, forKey: key) } } } } extension UserDefault where Value: ExpressibleByNilLiteral { init(key: String, _ container: UserDefaults = .standard) { self.init(key: key, defaultValue: nil, container: container) } }