无论如何,当您要存储
MyOwnType到文件时,它
MyOwnType必须是协议的子类
NSObject并符合
NSCoding协议。像这样:
class MyOwnType: NSObject, NSCoding { var name: String init(name: String) { self.name = name } required init(prer aDeprer: NSCoder) { name = aDeprer.depreObjectForKey("name") as? String ?? "" } func enpreWithCoder(aCoder: NSCoder) { aCoder.enpreObject(name, forKey: "name") }}然后,这里是
Dictionary:
var dict = [Int : [Int : MyOwnType]]()dict[1] = [ 1: MyOwnType(name: "foobar"), 2: MyOwnType(name: "bazqux")]
所以,这是您的问题:
将快速字典写入文件
您可以
NSKeyedArchiver用来写和
NSKeyedUnarchiver阅读:
func getFileURL(fileName: String) -> NSURL { let manager = NSFileManager.defaultManager() let dirURL = manager.URLForDirectory(.documentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false, error: nil) return dirURL!.URLByAppendingPathComponent(fileName)}let filePath = getFileURL("data.dat").path!// write to fileNSKeyedArchiver.archiveRootObject(dict, toFile: filePath)// read from filelet dict2 = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as [Int : [Int : MyOwnType]]// here `dict2` is a copy of `dict`但在您的问题中:
如何快速将其写入 plist 文件或从中读取?
实际上,
NSKeyedArchiver
format是二进制plist。但是,如果你想要的字典 作为plist中的一个值
,你可以序列化
Dictionary到
NSData用
NSKeyedArchiver:
// archive to datalet dat:NSData = NSKeyedArchiver.archivedDataWithRootObject(dict)// unarchive from datalet dict2 = NSKeyedUnarchiver.unarchiveObjectWithData(data) as [Int : [Int : MyOwnType]]



