Writing swift dictionary to file Writing swift dictionary to file swift swift

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]]