我正在努力将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
}
}
我有一个名为newdata.json的文件位于资源中但是当我检查它时,里面什么都没有。我也尝试删除并查看是否会创建该文件但它仍然无法正常工作。
答案 0 :(得分:1)
您的代码是正确的,但文件未写入您期望的位置。 Swift Playgrounds是沙箱,文件位于系统的另一部分,而不是项目的资源文件夹中。
您可以通过立即尝试从中读取来检查文件是否实际被保存,如下所示:
3
来自Tom的评论如下:具体来说,该文件位于某个地方,如let validDictionary = [
"numericalValue": 1,
"stringValue": "JSON",
"arrayValue": [0, 1, 2, 3, 4, 5]
]
let rawData: NSData!
if NSJSONSerialization.isValidJSONObject(validDictionary) { // True
do {
rawData = try NSJSONSerialization.dataWithJSONObject(validDictionary, options: .PrettyPrinted)
try rawData.writeToFile("newdata.json", options: .DataWritingAtomic)
var jsonData = NSData(contentsOfFile: "newdata.json")
var jsonDict = try NSJSONSerialization.JSONObjectWithData(jsonData!, options: .MutableContainers)
// -> ["stringValue": "JSON", "arrayValue": [0, 1, 2, 3, 4, 5], "numericalValue": 1]
} catch {
// Handle Error
}
}
答案 1 :(得分:1)
如果您使用的是Xcode 8,那么有更好的方法。
首先,在名为$('#myDiv').on('mouseenter', function() {
$(this).animate({
left: "+=10px",
top: "+=10px"
});
});
$('#myDiv').on('mouseleave', function() {
$(this).animate({
left: '-=10px',
top: '-=10px'
});
})
的{{1}}文件夹中创建一个目录。
接下来,在您的操场上导入游乐场支持:
Documents
最后,在文件网址中使用Shared Playground Data
。它将指向上面创建的文件夹:
import PlaygroundSupport
然后,您可以在游乐场中读取/写入该URL,并且(更容易)检查您正在保存的文件。这些文件将位于您在上面创建的playgroundSharedDataDirectory
文件夹中。
答案 2 :(得分:1)
使用以下扩展名:
extension Data {
func write(withName name: String) -> URL {
let url = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(name)
try! write(to: url, options: .atomicWrite)
return url
}
}