Attempt to set a non-property-list object as an NSUserDefaults

前端 未结 11 1755
闹比i
闹比i 2020-11-22 15:00

I thought I knew what was causing this error, but I can\'t seem to figure out what I did wrong.

Here is the full error message I am getting:

Attempt to se         


        
11条回答
  •  梦谈多话
    2020-11-22 15:34

    Swift with @propertyWrapper

    Save Codable object to UserDefault

    @propertyWrapper
        struct UserDefault {
            let key: String
            let defaultValue: T
    
            init(_ key: String, defaultValue: T) {
                self.key = key
                self.defaultValue = defaultValue
            }
    
            var wrappedValue: T {
                get {
    
                    if let data = UserDefaults.standard.object(forKey: key) as? Data,
                        let user = try? JSONDecoder().decode(T.self, from: data) {
                        return user
    
                    }
    
                    return  defaultValue
                }
                set {
                    if let encoded = try? JSONEncoder().encode(newValue) {
                        UserDefaults.standard.set(encoded, forKey: key)
                    }
                }
            }
        }
    
    
    
    
    enum GlobalSettings {
    
        @UserDefault("user", defaultValue: User(name:"",pass:"")) static var user: User
    }
    

    Example User model confirm Codable

    struct User:Codable {
        let name:String
        let pass:String
    }
    

    How to use it

    //Set value 
     GlobalSettings.user = User(name: "Ahmed", pass: "Ahmed")
    
    //GetValue
    print(GlobalSettings.user)
    

提交回复
热议问题