So I had this idea of creating an expiry for UserDefaults. This is the approach I was starting to take but I'm stuck.
struct TimedObject<T: Codable>: Codable {
    let object: T
    let expireDate: Date
}
and then:
extension UserDefaults {
    
    func set<T: Codable>(_ value: T, forKey key: String, expireDate: Date) {
        let timedObject = TimedObject<T>(object: value, expireDate: expireDate)
        let encoder = JSONEncoder()
        if let encoded = try? encoder.encode(timedObject) {
            UserDefaults.standard.set(encoded, forKey: key)
    }
    override open class func value(forKey key: String) -> Any? {
        guard let value = self.value(forKey: key) else {
            return nil
        }
        if TimedObject<???>.self == type(of: value) { // This is where I'm stuck
            ...
        }
    }
So if I would name the type and not use generics I would easily solve this. But naturally I prefer to use generics. Can this be done?
 
     
     
    