微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift4 – 如何将带有对象的数组保存到UserDefaults

My Object符合新的 Swift 4 Codeable协议.如何在UserDefaults中保存这些对象的数组?

struct MyObject: Codeable {
    var name: String
    var something: [String]
}

myObjectsArray = [MyObject]() // filled with objects
UserDefaults.standard.set(myObjectsArray,forKey: "user_filters")

错误

Terminating app due to uncaught exception
‘NSinvalidargumentexception’,reason: ‘Attempt to insert non-property
list object

解决方法

哇,我得到了它的工作:

这是使用可编辑对象保存数组的Swift 4语法:

我的解决方案是将其编码为JSON对象并保存:

static var getAllObjects: [MyObject] {
      let defaultObject = MyObject(name: "My Object Name")
      if let objects = UserDefaults.standard.value(forKey: "user_objects") as? Data {
         let decoder = JSONDecoder()
         if let objectsDecoded = try? decoder.decode(Array.self,from: objects) as [MyObject] {
            return objectsDecoded
         } else {
            return [defaultObject]
         }
      } else {
         return [defaultObject]
      }
   }

 static func saveAllObjects(allObjects: [MyObject]) {
      let encoder = JSONEncoder()
      if let encoded = try? encoder.encode(allObjects){
         UserDefaults.standard.set(encoded,forKey: "user_objects")
      }
 }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐