我如何创建一个 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 屏幕截图。