使用NSCoding保存结构的Helperclass

时间:2017-01-23 08:36:01

标签: swift struct save nscoding

我想写一个保存struct array的函数。我知道,使用NSCoding是正确的方法,但只适用于类。但是我找到了一个使用包含结构本身的类的解决方法:

extension EXIFData {
    class EXIFDataClass: NSObject, NSCoding {

        var exifData: EXIFData?
...
}

但我如何使用它(称之为)?例如。定义为

var exif : EXIFData

或(下一步)

var exifs : [EXIFData]

我喜欢尽可能多地使用Swift 3.0的实际功能,因为我刚刚开始。我找到了一些不同的旧样式和Swift版本的解决方案。

1 个答案:

答案 0 :(得分:1)

我不确定你的EXIFData类是什么,但我认为你最好保存一个包含EXIFData对象的类。

比如说你需要保存一堆不同类型的数据,包括EXIFData,然后你可以创建一个类,如下所示,用EXIFData类型对类进行解码,编码和初始化:

org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo
SEVERE: MessageBodyWriter not found for media type=text/plain

然后你可以像这样初始化你的课程:

class UserData: NSObject, NSCoding {

    var exifData: EXIFData
    //other variables of data....

    required init?(coder aDecoder: NSCoder) {
        exifData = aDecoder.decodeObject(forKey: "EXIFData") as! EXIFData
        //decode other values
    }

    init(exifData: EXIFData) {
        self.exifData = exifData
        //intialize other values
    }

    func encode(with aCoder: NSCoder) {
        aCoder.encode(exifData, forKey: "EXIFData")
        //encode other values
    }

}

然后像这样调用您的用户“EXIFData”:

var myUserData = UserData(...) //initialize with EXIFData