使用 NSCoding 保存结构的 Helperclass

Posted

技术标签:

【中文标题】使用 NSCoding 保存结构的 Helperclass【英文标题】:Helperclass for saving structs with NSCoding 【发布时间】:2017-01-23 08:36:00 【问题描述】:

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

extension EXIFData 
    class EXIFDataClass: NSObject, NSCoding 

        var exifData: EXIFData?
...

但是我该如何使用它(调用它)?例如。定义为

var exif : EXIFData

或(下一步)

var exifs : [EXIFData]

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

【问题讨论】:

【参考方案1】:

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

假设你需要保存一堆不同类型的数据,包括 EXIFData,那么你可以创建一个如下所示的类,它对 EXIFData 类型的类进行解码、编码和初始化:

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
    


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

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

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

myUserData.exifData

【讨论】:

EXIFData 是一个结构。只需要加载和保存这些数据。最后我想保存一个数组:[EXIFData]

以上是关于使用 NSCoding 保存结构的 Helperclass的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSCoding 保存结构

将 Codable 保存到 UserDefaults 并匹配 NSCoding 的外观

使用 NSCoding 保存 TableView 单元格的重新排序

无法通过 NSCoding 保存表数据

保存 PFObject NSCoding

使用 NSCoding Swift 保存对象时出现异常