Swift - 将数组写入文本文件

时间:2014-07-27 01:38:14

标签: arrays file text swift output

我从包含几千行纯文本的文件中读入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)中将文本字符串数组写入文件(或通过数组循环并将每个数组项追加到文件中)?

4 个答案:

答案 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);
}