我从包含几千行纯文本的文件中读入myArray(本机Swift)。
myData = String.stringWithContentsOfFile(myPath, encoding: NSUTF8StringEncoding, error: nil)
var myArray = myData.componentsSeparatedByString("\n")
我更改了myArray中的一些文本(没有任何一点粘贴此代码)。
现在我想将myArray的更新内容写入新文件。 我试过了..
let myArray2 = myArray as NSArray
myArray2.writeToFile(myPath, atomically: false)
但文件内容采用plist格式。
有没有办法在Swift(或桥接Swift)中将文本字符串数组写入文件(或通过数组循环并将每个数组项追加到文件中)?
答案 0 :(得分:18)
正如drewag在接受的帖子中指出的那样,你可以从数组中构建一个字符串,然后在字符串上使用writeToFile
方法。
但是,您可以简单地使用Swift的Array.joinWithSeparator
来完成相同的操作,但代码更少,性能也更好。
例如:
// swift 2.0
let array = [ "hello", "goodbye" ]
let joined = array.joinWithSeparator("\n")
do {
try joined.writeToFile(saveToPath, atomically: true, encoding: NSUTF8StringEncoding)
} catch {
// handle error
}
// swift 1.x
let array = [ "hello", "goodbye" ]
let joined = "\n".join(array)
joined.writeToFile(...)
答案 1 :(得分:2)
您需要将数组缩减为字符串:
var output = reduce(array, "") { (existing, toAppend) in
if existing.isEmpty {
return toAppend
}
else {
return "\(existing)\n\(toAppend)"
}
}
output.writeToFile(...)
reduce
方法接受一个集合并将其全部合并到一个实例中。它需要一个初始实例和闭包来将集合的所有元素合并到原始实例中。
我的示例将空字符串作为其初始实例。然后闭包检查现有输出是否为空。如果是,则只需返回要附加的文本,否则,它使用String Interpolation返回现有输出,并使用换行符之间的新元素。
使用Swift的各种语法糖特征,整个减少可以减少到:
var output = reduce(array, "") { $0.isEmpty ? $1 : "\($0)\n\($1)" }
答案 2 :(得分:1)
使用 Swift 5 ,我想使用 Swift 4 ,您可以使用对我来说很好的代码段。
let array = ["hello", "world"]
let joinedStrings = array.joined(separator: "\n")
do {
try joinedStrings.write(toFile: outputURL.path, atomically: true, encoding: .utf8)
} catch let error {
// handle error
print("Error on writing strings to file: \(error)")
}
答案 3 :(得分:-1)
Swift提供了许多循环遍历数组的方法。您可以循环遍历字符串并逐个打印到文本文件。像这样:
for theString in myArray {
theString.writeToFile(myPath, atomically: false, encoding: NSUTF8StringEncoding, error: nil);
}