Попробуйте это:
// Append a string to a file with a terminator that defaults to newline
// Equivalent to WriteLine in some other languages
func append(string: String, terminator: String = "\n", toFileAt url: URL) throws {
// The data to be added to the file
let data = (string + terminator).data(using: .utf8)!
// If file doesn't exist, create it
guard FileManager.default.fileExists(atPath: url.path) else {
try data.write(to: url)
return
}
// If file already exists, append to it
let fileHandle = try FileHandle(forUpdating: url)
fileHandle.seekToEndOfFile()
fileHandle.write(data)
fileHandle.closeFile()
}
let url = URL(fileURLWithPath: "/path/to/file.log")
try append(string: "Line 1", toFileAt: url)
try append(string: "Line 2", toFileAt: url)
Функция выдаст ошибку, если по какой-либо причине не сможет записать в указанный файл.
Почему бы не заставить функцию принимать путь как String
(/path/to/file.log
) вместо URL
(file://path/to/file.log
)? Apple рекомендует, чтобы все пути были представлены URL
, даже если они указывают на локальные файлы. Многие новые API принимают только путь как URL. FileManager
- это старое похмелье от Objective-C. Есть еще несколько функций (например, fileExists(atPath:)
), которые не были преобразованы в Swifty.