我如何创建一个 plist,我可以在我的应用程序中很好地访问数组 -> 字典 -> 字典 -> 数组 -> swift 中的 mYClassInstances?
How do i create a plist that I can access nicely in my app of array -> dictionary -> dictionary -> array -> mYClassInstances in swift?
我需要保存和加载 mYClassInstances 数组的字典数组。
我应该如何存储这个对象?
您不能将 Swift class 直接存储在 属性 列表中。您可以存储有关 class 的足够信息以便稍后重建它,但我认为这不是您所要求的。如果您想在文件中存储对象的任意图形,Cocoa 提供 NSKeyedArchiver/Unarchiver classes.
确保您的 MyClassInstance class 派生自 NSObject 并且它支持 NSCoding 协议。例如,
class MyClassInstances: NSObject, NSCoding, Printable {
let name: String
init(name: String) {
self.name = name
}
@objc func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(name, forKey: "NAME")
}
@objc required init(coder decoder: NSCoder) {
self.name = decoder.decodeObjectForKey("NAME") as! String
}
override var description: String {
return "MyClassInstance.name = \(name)"
}
}
然后假设您将字典数组、字典数组、实例数组存储在名为 nest 的变量中;您可以通过此调用存储所有对象。
let temporaryDirectory = NSTemporaryDirectory()
let temporaryFile = temporaryDirectory.stringByAppendingPathComponent("SO-test.archive")
NSKeyedArchiver.archiveRootObject(nest, toFile: temporaryFile)
读回对象图使用此调用。请注意,正确进行类型转换很重要。
let nest2 = NSKeyedUnarchiver.unarchiveObjectWithFile(temporaryFile) as! [[String: [String: [MyClassInstances]]]]
这是 Playground 屏幕截图。
我需要保存和加载 mYClassInstances 数组的字典数组。
我应该如何存储这个对象?
您不能将 Swift class 直接存储在 属性 列表中。您可以存储有关 class 的足够信息以便稍后重建它,但我认为这不是您所要求的。如果您想在文件中存储对象的任意图形,Cocoa 提供 NSKeyedArchiver/Unarchiver classes.
确保您的 MyClassInstance class 派生自 NSObject 并且它支持 NSCoding 协议。例如,
class MyClassInstances: NSObject, NSCoding, Printable {
let name: String
init(name: String) {
self.name = name
}
@objc func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(name, forKey: "NAME")
}
@objc required init(coder decoder: NSCoder) {
self.name = decoder.decodeObjectForKey("NAME") as! String
}
override var description: String {
return "MyClassInstance.name = \(name)"
}
}
然后假设您将字典数组、字典数组、实例数组存储在名为 nest 的变量中;您可以通过此调用存储所有对象。
let temporaryDirectory = NSTemporaryDirectory()
let temporaryFile = temporaryDirectory.stringByAppendingPathComponent("SO-test.archive")
NSKeyedArchiver.archiveRootObject(nest, toFile: temporaryFile)
读回对象图使用此调用。请注意,正确进行类型转换很重要。
let nest2 = NSKeyedUnarchiver.unarchiveObjectWithFile(temporaryFile) as! [[String: [String: [MyClassInstances]]]]
这是 Playground 屏幕截图。