bartvdb
bartvdb

Reputation: 21

Refreshing userdefaults in Swift 4

Is it possible to refresh the value of the user defaults in Swift4? The values change after scanning a new product and they are stored in a user default. So when u scan a new product the user default has to refresh.

I hope someone has a solution for me

Upvotes: 1

Views: 5793

Answers (3)

Ahmad F
Ahmad F

Reputation: 31645

As a workaround to achieve it, you could declare a computed property for getting/setting the value from the user defaults, example:

var flag: Bool {
    get {
        let value = UserDefaults.standard.bool(forKey: "flag_key")
        
        return value
    }
    
    set {
        UserDefaults.standard.set(newValue, forKey: "flag_key")
        UserDefaults.standard.synchronize()
    }
}

reading the value of flag returns the Boolean value from the user defaults (of "flag_key" key) and editing its value would be also reflected to the user defaults.

Upvotes: 2

adarshaU
adarshaU

Reputation: 960

Try this one. before setting remove and synchronise it.this might solve your issue

func setValueToDefaults(key:String, value:AnyObject){
    self.removeKeyValueFromDefaults(Key:key)
    UserDefaults.standard.set(value, forKey: key)

}

func getValueFromDefaults(key:String) ->AnyObject?{

    if((UserDefaults.standard.value(forKey: key)) != nil){

        let value:AnyObject = UserDefaults.standard.value(forKey: key)! as AnyObject

        return value
    }else{

        return nil
    }

}

func removeKeyValueFromDefaults(Key:String){

    let defaults = UserDefaults.standard
    defaults.removeObject(forKey: Key)
    defaults.synchronize()

}

Upvotes: 2

Rahul Dasgupta
Rahul Dasgupta

Reputation: 924

Set userdefaults as you are setting first time with same key.

UserDefaults.standard.set(value, forKey: key)

Upvotes: 2

Related Questions