如何在 Swift 中将 NSData 写入新文件?

doz*_*ozo 4 xcode json nsdate ios swift

我正在努力将 NSData 实例的内容写入文件。我目前正在使用 Xcode 游乐场。

这是我的代码:

let validDictionary = [
    "numericalValue": 1,
    "stringValue": "JSON",
    "arrayValue": [0, 1, 2, 3, 4, 5]
]

let rawData: NSData!


if NSJSONSerialization.isValidJSONObject(validDictionary) {
    do {
        rawData = try NSJSONSerialization.dataWithJSONObject(validDictionary, options: .PrettyPrinted)
        try rawData.writeToFile("newdata.json", options: .DataWritingAtomic)
    } catch {
        // Handle Error
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个名为 newdata.json 的文件位于资源中,但是当我检查它时,里面什么也没有。我也尝试删除并查看文件是否会被创建,但它仍然不起作用。

Bar*_*zyk 5

使用以下扩展名:

extension Data {

    func write(withName name: String) -> URL {

        let url = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(name)

        try! write(to: url, options: .atomicWrite)

        return url
    }
}
Run Code Online (Sandbox Code Playgroud)


Car*_*ter 2

您的代码是正确的,但文件没有写入您期望的位置。Swift Playgrounds 是沙盒的,文件位于系统的另一部分,而不是项目的资源文件夹中。

\n\n

您可以通过立即尝试读取文件来检查文件是否确实被保存,如下所示:

\n\n
let validDictionary = [\n    "numericalValue": 1,\n    "stringValue": "JSON",\n    "arrayValue": [0, 1, 2, 3, 4, 5]\n]\n\nlet rawData: NSData!\n\n\nif NSJSONSerialization.isValidJSONObject(validDictionary) { // True\n    do {\n        rawData = try NSJSONSerialization.dataWithJSONObject(validDictionary, options: .PrettyPrinted)\n        try rawData.writeToFile("newdata.json", options: .DataWritingAtomic)\n\n        var jsonData = NSData(contentsOfFile: "newdata.json")\n        var jsonDict = try NSJSONSerialization.JSONObjectWithData(jsonData!, options: .MutableContainers)\n        // -> ["stringValue": "JSON", "arrayValue": [0, 1, 2, 3, 4, 5], "numericalValue": 1]\n\n    } catch {\n        // Handle Error\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

来自汤姆下面的评论:具体来说,该文件位于某个地方,例如/private/var/folder\xe2\x80\x8c\xe2\x80\x8bs/bc/lgy7c6tj6pjb6cx0\xe2\x80\x8c\xe2\x80\x8bp108v7cc0000gp/T/com.\xe2\x80\x8c\xe2\x80\x8bapple.dt.Xcode.pg/con\xe2\x80\x8c\xe2\x80\x8btainers/com.apple.dt.\xe2\x80\x8c\xe2\x80\x8bplayground.stub.iOS_S\xe2\x80\x8c\xe2\x80\x8bimulator.MyPlayground\xe2\x80\x8c\xe2\x80\x8b-105DE0AC-D5EF-46C7-B\xe2\x80\x8c\xe2\x80\x8b4F7-B33D8648FD50/newd\xe2\x80\x8c\xe2\x80\x8bata.json.

\n