Writing swift dictionary to file
Anyway, when you want to store MyOwnType
to file, MyOwnType
must be a subclass of NSObject
and conforms to NSCoding
protocol. like this:
class MyOwnType: NSObject, NSCoding { var name: String init(name: String) { self.name = name } required init(coder aDecoder: NSCoder) { name = aDecoder.decodeObjectForKey("name") as? String ?? "" } func encodeWithCoder(aCoder: NSCoder) { aCoder.encodeObject(name, forKey: "name") }}
Then, here is the Dictionary
:
var dict = [Int : [Int : MyOwnType]]()dict[1] = [ 1: MyOwnType(name: "foobar"), 2: MyOwnType(name: "bazqux")]
So, here comes your question:
Writing swift dictionary to file
You can use NSKeyedArchiver
to write, and NSKeyedUnarchiver
to read:
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`
But in the body of your question:
how can I write/read it to/from a plist file in swift?
In fact, NSKeyedArchiver
format is binary plist. But if you want that dictionary as a value of plist, you can serialize Dictionary
to NSData
with NSKeyedArchiver
:
// archive to datalet dat:NSData = NSKeyedArchiver.archivedDataWithRootObject(dict)// unarchive from datalet dict2 = NSKeyedUnarchiver.unarchiveObjectWithData(data) as [Int : [Int : MyOwnType]]