Swift - Write an Array to a Text File

With Swift 5 and I guess with Swift 4 you can use code snippet which works fine to me.

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)")
}

You need to reduce your array back down to a string:

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

The reduce method takes a collection and merges it all into a single instance. It takes an initial instance and closure to merge all elements of the collection into that original instance.

My example takes an empty string as its initial instance. The closure then checks if the existing output is empty. If it is, it only has to return the text to append, otherwise, it uses String Interpolation to return the existing output and the new element with a newline in between.

Using various syntactic sugar features from Swift, the whole reduction can be reduced to:

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

As drewag points out in the accepted post, you can build a string from the array and then use the writeToFile method on the string.

However, you can simply use Swift's Array.joinWithSeparator to accomplish the same with less code and likely better performance.

For example:

// 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(...)