Swift:
Writing a text file

How to:

Using Swift Standard Library

Swift’s standard library includes all the tools needed to write text files. Here’s a basic approach:

import Foundation

let content = "Hello, Wired readers! Learning Swift is fun."
let filePath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
let fileName = "\(filePath)/example.txt"

do {
    try content.write(toFile: fileName, atomically: false, encoding: String.Encoding.utf8)
    print("File written successfully")
} catch let error as NSError {
    print("Failed writing to URL: \(fileName), Error: " + error.localizedDescription)
}

This code snippet writes a string to a file named example.txt in the documents directory. It handles potential errors using Swift’s do-try-catch error handling.

Using FileManager for More Control

For more control over file attributes or to check if the file already exists, FileManager can be used:

import Foundation

let fileManager = FileManager.default
let directories = fileManager.urls(for: .documentDirectory, in: .userDomainMask)
if let documentDirectory = directories.first {
    let fileURL = documentDirectory.appendingPathComponent("example.txt")
    let content = "Exploring Swift for file management is enlightening."

    if fileManager.fileExists(atPath: fileURL.path) {
        print("File already exists")
    } else {
        do {
            try content.write(to: fileURL, atomically: true, encoding: .utf8)
            print("File created and written successfully")
        } catch {
            print("Error writing file: \(error)")
        }
    }
}

Using Third-Party Libraries

One popular third-party library for filesystem operations in Swift is Files by John Sundell:

First, add Files to your project, usually via Swift Package Manager.

// swift-tools-version:5.3
import PackageDescription

let package = Package(
    name: "YourPackageName",
    dependencies: [
        .package(url: "https://github.com/JohnSundell/Files", from: "4.0.0"),
    ],
    targets: [
        .target(
            name: "YourTargetName",
            dependencies: ["Files"]),
    ]
)

Then, use it to write to a file:

import Files

do {
    let file = try File(path: "/path/to/your/directory/example.txt")
    try file.write(string: "Swift and Files library make a powerful combination.")
    print("File written successfully using Files library.")
} catch {
    print("An error occurred: \(error)")
}

With the Files library, handling files becomes more straightforward, allowing you to focus on the business logic of your application rather than the nitty-gritty of file management.