使用 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的主要内容,如果未能解决你的问题,请参考以下文章
将 Codable 保存到 UserDefaults 并匹配 NSCoding 的外观