// MARK: - Merge extension Array where Element: Equatable {
func merge(target: [Element]) -> [Element] {
let result = target.filter { item -> Bool in
return self.contains(where: { item == $0}) == false
}
return self + result
}
}
@propertyWrapper public struct UserDefault { let key: String let defaultValue: T public var wrappedValue: T { get { return UserDefaults.standard.object(forKey: key) as? T ?? defaultValue }
set {
UserDefaults.standard.set(newValue, forKey: key)
}
}
}
struct Store<T: Codable> { static func value(key: String) -> T? { let jsonString = UserDefaults.standard.string(forKey: key) return jsonString?.decode() } static func set(key: String, value: T?) { UserDefaults.standard.set(value?.jsonString, forKey: key) UserDefaults.standard.synchronize() } }
@propertyWrapper struct JsonSeriablizable<T: Codable> { private let key: String init(_ key: String) { self.key = key } var wrappedValue: T? { get { return Store.value(key: key) } set { Store.set(key: key, value: newValue) } } }
@propertyWrapper struct UserDefault { let key: String let defaultValue: T
var wrappedValue: T {
get {
return UserDefaults.standard.object(forKey: key) as? T ?? defaultValue
}
set {
UserDefaults.standard.set(newValue, forKey: key)
}
}
}