Swift - 将数组写入文本文件

Kym*_*Kym 9 arrays text file output swift

我从包含几千行纯文本的文件中读入myArray(本机Swift).

myData = String.stringWithContentsOfFile(myPath, encoding: NSUTF8StringEncoding, error: nil)
var myArray = myData.componentsSeparatedByString("\n")
Run Code Online (Sandbox Code Playgroud)

我更改了myArray中的一些文本(没有点粘贴任何此代码).

现在我想将myArray的更新内容写入新文件.我试过这个..

let myArray2 = myArray as NSArray
myArray2.writeToFile(myPath, atomically: false)
Run Code Online (Sandbox Code Playgroud)

但文件内容则采用plist格式.

有没有办法在Swift(或桥接Swift)中将文本字符串数组写入文件(或循环遍历数组并将每个数组项追加到文件中)?

DPl*_*usV 19

正如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(...)
Run Code Online (Sandbox Code Playgroud)


dre*_*wag 2

您需要将数组缩减回字符串:

var output = reduce(array, "") { (existing, toAppend) in
    if existing.isEmpty {
        return toAppend
    }
    else {
        return "\(existing)\n\(toAppend)"
    }
}
output.writeToFile(...)
Run Code Online (Sandbox Code Playgroud)

reduce方法获取一个集合并将其全部合并到一个实例中。它需要一个初始实例和闭包来将集合的所有元素合并到该原始实例中。

我的示例采用空字符串作为其初始实例。然后闭包检查现有输出是否为空。如果是,则只需返回要追加的文本,否则,它使用字符串插值返回现有输出和新元素,中间有换行符。

使用 Swift 的各种语法糖功能,整个简化过程可以简化为:

var output = reduce(array, "") { $0.isEmpty ? $1 : "\($0)\n\($1)" }
Run Code Online (Sandbox Code Playgroud)

  • @DPlusV,如果您有替代解决方案,请将其作为单独的答案发布。此外,“当你遇到一个极其草率、不费力气的帖子,或者一个答案明显而且可能是危险的错误时”,就应该使用否决票。我可能是错的,但我不认为我的答案属于这一类。如果是,请具体说明原因。 (2认同)