我有一个函数可以将一些数字写入文件
fun writeNumToFile -> Void {
//get Documents’ path
let docPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last as? String
let filePath = docPath.stringByAppendingPathComponent(“myFlie.txt”)
//the count is NOT the count of elements in the array below.
//think it as an independent constant.
let count = 10
//Write count to file
String(count).writeToFile(filePath, atomically: false, encoding: NSUTF8StringEncoding, error: nil);
//Write an array of numbers to file
for idx in [1,2,3] {
String(idx as! String).writeToFile(filePath, atomically: false, encoding: NSUTF8StringEncoding, error: nil);
}
}
现在我想从文件中读取数字,我知道我可以通过以下方式阅读文件内容:
let fileContent = String(contentsOfFile: filePath, encoding: NSUTF8StringEncoding, error: nil)
但是如何才能获得count
&获得内容后,[1,2,3]
会回来吗?
答案 0 :(得分:2)
您正在编写代码,就像使用低级文件i / o一样。你不是。您使用的writeToFile:atomically:
方法使用新内容覆盖文件,而不是将数据附加到现有文件。第二次写入会删除第一次写入的内容。
NSArray
支持writeToFile:atomically:
方法,[String]
数组应与NSArray互操作。
你应该能够简单地说:
let array = [1, 2, 3]
let ok = array .writeToFile(filePath, atomically: false)
然后,
let array = NSArray.contentsOfFile(filePath)
我说“应该能够”,因为我仍然在学习Swift与基础课程之间互动的微妙之处。
如果您需要将多个离散的东西保存到文件中,请创建一个字典:
let someValue = 42
let anArray = [1, 2, 3]
let aDictionary = [
"someValue": someValue,
"array": anArray]
let ok = aDictionary.writeToFile(filePath, atomically: false)
并阅读:
let aDictionary = NSDictionary(contentsOfFile: filePath)
let someValue = aDictionary["someValue"] as! Int
let anArray = aDictionary["array"] as! [Int]
无需单独保存阵列中的项目数。该数组能够从文件内容中重构自己,包括正确的元素数。
请注意,iOS包含C文件i / o库,应该可以从Swift中调用。如果你是贪婪的惩罚,你可以使用fopen()
,fseek()
,fwrite()
等来做你想做的事情。(但不要。这是更多的工作,更多的错误-prone,以及在iOS或Mac OS中执行此操作的非标准方式。)