刷新Swift 4中的用户默认值

刷新Swift 4中的用户默认值,swift,nsuserdefaults,swift4,xcode9,Swift,Nsuserdefaults,Swift4,Xcode9,是否可以在Swift4中刷新用户默认值?扫描新产品后,这些值会更改,并存储在用户默认值中。因此,当你扫描一个新产品时,用户默认值必须刷新 我希望有人能为我提供一个解决方案设置用户默认值,就像您第一次使用相同的键设置一样 UserDefaults.standard.set(value, forKey: key) 设置userdefaults,就像第一次使用相同的键设置一样 UserDefaults.standard.set(value, forKey: key) 试试这个。在设置之前,请删除并

是否可以在Swift4中刷新用户默认值?扫描新产品后,这些值会更改,并存储在用户默认值中。因此,当你扫描一个新产品时,用户默认值必须刷新


我希望有人能为我提供一个解决方案

设置用户默认值,就像您第一次使用相同的键设置一样

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

设置userdefaults,就像第一次使用相同的键设置一样

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

试试这个。在设置之前,请删除并同步它。这可能会解决您的问题

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()

}

试试这个。在设置之前,请删除并同步它。这可能会解决您的问题

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()

}

作为一种解决方法,您可以声明一个计算属性,用于从用户默认值获取/设置值,例如:

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()
    }
}

读取
标志的值
会从用户默认值(即“flag_key”键)返回布尔值,编辑其值也会反映到用户默认值。

作为一种解决方法,您可以声明一个计算属性,用于从用户默认值获取/设置值,例如:

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()
    }
}

读取
标志的值
将从用户默认值(即“标志键”键)返回布尔值,编辑其值也将反映到用户默认值。

是,您可以覆盖UserDefaults中的值。如果您重新为要覆盖的键指定值,则可以覆盖该值。UserDefaults.standard.set(value,forKey:key)@Scriptable我怎么做?我扫描产品时需要这样做。然后这些值必须更改,您只需重新设置它,就像您第一次设置它一样。@Scriptable里面有类似缓存的东西吗?因为有时值在我关闭应用程序后会更改,有时不会刷新。是的,您可以覆盖UserDefaultsif中的值,如果您为密钥重新分配值,它将覆盖。UserDefaults.standard.set(value,forKey:key)@Scriptable我怎么做?我扫描产品时需要这样做。然后这些值必须更改,您只需重新设置它,就像您第一次设置它一样。@Scriptable里面有类似缓存的东西吗?因为有时候在我关闭应用程序后,值会发生变化,有时候它不会刷新。