如何使用Swift保存(持久化)包含其他类的类对象

时间:2017-03-28 04:26:52

标签: ios swift nscoding persistent-storage

我在尝试保存数据时遇到了一些麻烦。我至少知道,如果我有一个简单的类与原始类型,那么我只需要NSCoding(编码器和解码器)。但是我有一个主类,它有2个同一类的其他对象,我不太确定如何坚持它。

主类的例子:

class MainClass {
  var name: String
  var description: String
  var objectA: CustomClass
  var objectB: CustomClass
  ...
}

我是否必须实现与主类相同的编码?让它可序列化?我怎么去保存呢?

1 个答案:

答案 0 :(得分:0)

您需要在包含的类中实现NSCoding,然后才能执行此操作

class MainClass {
  var name: String
  var description: String
  var objectA: CustomClass
  var objectB: CustomClass

   required init?(coder decoder: NSCoder)
    {
        super.init()
         if let decodedObjectA = decoder.decodeObject(forKey: "objectA") as? CustomClass{
             self.objectA = decodedObjectA
         }
        if let decodedObjectB = decoder.decodeObject(forKey: "objectB") as? CustomClass{
             self.objectB = decodedObjectB
         }


    }
}

//MARK: NSCoding
extension MainClass : NSCoding
{
    func encode(with aCoder: NSCoder) {
        aCoder.encode(self.objectA, forKey: "objectA")
        aCoder.encode(self.objectB, forKey: "objectB")
    }
}

我希望这有助于你