【问题标题】:Helperclass for saving structs with NSCoding使用 NSCoding 保存结构的 Helperclass
【发布时间】: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 找到了一些不同的解决方案。

【问题讨论】:

    标签: swift struct save nscoding


    【解决方案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]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多