如何将任何类型的变量保存到Swift中的UserDefaults?

时间:2017-07-04 21:22:37

标签: swift storage nsuserdefaults

这里有一个名为“Data”的变量。它来自“memorySTR”类型,它是自定义的。当应用程序关闭时,此变量必须保存到UserDefaults,并在应用程序再次运行时加载。这是代码。

//Here loads the data when the app runs :
if UserDefaults.standard.object(forKey: "Data") != nil {Data = UserDefaults.standard.object(forKey: "Data") as! MemorySTR} 
//Here saves the data when necessary :
UserDefaults.standard.set( Data ,forKey: "Data")

但遗憾的是,UserDefaults不接受类型“memorySTR”,因此它会出错。此外,“memorySTR”类型不是简单类型,这意味着我们无法逐个保存其属性。那么我们如何将该变量保存到永久存储? 请用SIMPLES和SHORTEST方法解决这个问题。

1 个答案:

答案 0 :(得分:0)

您可以在NSKeyArchiver课程中使用NSCoder并实施MemorySTR协议,然后执行此操作

实施NSCoder协议

required convenience init?(coder decoder: NSCoder)
    {
       //***decode your attributes here**//
    }

extension MemorySTR : NSCoding
{ 
    func encode(with aCoder: NSCoder) {
          //***encode your attributes here**//
    }
}

从UserDefaults保存和加载自定义对象

func saveData(object: MemorySTR){
    let myEncodedObject  =  NSKeyedArchiver.archivedData(withRootObject: object)
    UserDefaults.standard.set(myEncodedObject, forKey:"memoryStr")
}

func loadMemorySTRObject() -> MemorySTR?{
    let myEncodedObjet = UserDefaults.standard.object(forKey:"memoryStr")

    if myEncodedObjet != nil {
        return  NSKeyedUnarchiver.unarchiveObject(with: myEncodedObjet as! Data) as! MemorySTR
    }else{
        return  nil
    }
}

希望这有帮助