【问题标题】:Refreshing userdefaults in Swift 4在 Swift 4 中刷新用户默认值
【发布时间】:2017-12-18 13:02:43
【问题描述】:

是否可以在 Swift4 中刷新用户默认值?扫描新产品后,这些值会发生变化,并存储在用户默认值中。因此,当您扫描新产品时,用户默认必须刷新。

希望有人能帮我解决

【问题讨论】:

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

标签: swift nsuserdefaults swift4 xcode9


【解决方案1】:

在您第一次使用相同的键设置时设置用户默认值。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      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 的值会从用户默认值(“flag_key”键)返回布尔值,编辑其值也会反映到用户默认值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-11
        • 2017-10-11
        • 2011-08-16
        • 2020-05-13
        • 1970-01-01
        • 2018-03-09
        相关资源
        最近更新 更多