【问题标题】:Save/Get UIColor from UserDefaults从 UserDefaults 保存/获取 UIColor
【发布时间】:2019-03-30 16:42:48
【问题描述】:

我需要一些帮助来从 UserDefaults 加载和读取 UIColor。

我找到了一个不错的扩展:

extension UserDefaults {
 func colorForKey(key: String) -> UIColor? {
  var color: UIColor?
  if let colorData = data(forKey: key) {
   color = NSKeyedUnarchiver.unarchiveObject(with: colorData) as? UIColor
  }
  return color
 }

 func setColor(color: UIColor?, forKey key: String) {
  var colorData: NSData?
   if let color = color {
    colorData = NSKeyedArchiver.archivedData(withRootObject: color) as NSData?
  }
  set(colorData, forKey: key)
 }

}

但是 NSKeyedUnarchiver.unarchiveObject 最近被弃用了,所以我不知道如何从中获取数据。

有什么建议吗? 谢谢!

【问题讨论】:

    标签: swift string uicolor userdefaults nskeyedunarchiver


    【解决方案1】:

    在您的代码中,只需替换 2 行,即

    替换

    color = NSKeyedUnarchiver.unarchiveObject(with: colorData) as? UIColor

    color = try! NSKeyedUnarchiver.unarchivedObject(ofClass: UIColor.self, from: colorData)

    //// 这里可以使用try? 代替try! 并将其包装在if-let 语句中。您的选择。

    替换

    colorData = NSKeyedArchiver.archivedData(withRootObject: color) as NSData?

    colorData = try? NSKeyedArchiver.archivedData(withRootObject: color, requiringSecureCoding: true)

    另外,在var colorData: NSData? 中使用Data 而不是NSData,即

    var colorData: Data?
    

    【讨论】:

      【解决方案2】:

      只需按照弃用消息告诉您的操作:

      extension UserDefaults {
          func colorForKey(key: String) -> UIColor? {
              if let colorData = data(forKey: key),
                  let color = try? NSKeyedUnarchiver.unarchivedObject(ofClass: UIColor.self, from: colorData)
              {
                  return color
              } else {
                  return nil
              }
          }
      
          // But why an Option<UIColor> here?
          func setColor(color: UIColor?, forKey key: String) {
              if let color = color,
                  let colorData = try? NSKeyedArchiver.archivedData(withRootObject: color, requiringSecureCoding: true)
              {
                  set(colorData, forKey: key)
              }
          }
      }
      

      【讨论】:

      • 你的意思是“为什么这里是 Optional?”至于为什么函数setColor(color:forKey)Color 采用Optional 参数?
      猜你喜欢
      • 2016-03-25
      • 2014-06-15
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      相关资源
      最近更新 更多