Чтение и запись данных
Сохраняйте данные и строки на диске.
«Чтение и запись данных» — бесплатный урок Swift Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
Чтение и запись данных
Тип Data из Foundation хранит необработанные байты, а String и Data умеют читать данные из URL-адресов файлов и записывать их туда.
Запись строки
write(to:atomically:encoding:) сохраняет строку в URL-адрес файла. При атомарной записи используется временный файл, что предотвращает повреждение данных.
import Foundation
let url = URL(fileURLWithPath: "/tmp/hello.txt")
try? "Hello, file!".write(to: url, atomically: true, encoding: .utf8)
print("Wrote string to disk")Чтение строки
String(contentsOf:encoding:) загружает файл обратно в память в виде текста.
import Foundation
let url = URL(fileURLWithPath: "/tmp/hello.txt")
if let text = try? String(contentsOf: url, encoding: .utf8) {
print(text)
}Работа с данными
Data(contentsOf:) считывает любой файл как необработанные байты, что подходит для изображений, архивов и двоичных форматов.
import Foundation
let url = URL(fileURLWithPath: "/tmp/hello.txt")
if let data = try? Data(contentsOf: url) {
print("Byte count: \(data.count)")
}Запись данных
data.write(to:) сохраняет байты в файл. В сочетании с кодированием этот метод подходит для хранения текста и любых сериализованных данных.
import Foundation
let bytes = Data([0x48, 0x69])
let url = URL(fileURLWithPath: "/tmp/bytes.bin")
try? bytes.write(to: url)
print("Wrote raw data")Преобразование данных в строку
Преобразуйте Data в текст с помощью String(data:encoding:), если Вам известна кодировка байтов.
import Foundation
let data = Data([0x48, 0x69])
if let s = String(data: data, encoding: .utf8) {
print(s)
}Кодирование JSON
Используйте JSONEncoder, чтобы преобразовать значение Codable в Data, готовое для записи на диск.
import Foundation
struct Note: Codable { let text: String }
let data = try? JSONEncoder().encode(Note(text: "hi"))
let url = URL(fileURLWithPath: "/tmp/note.json")
try? data?.write(to: url)
print("Saved JSON")Декодирование JSON
Считайте данные обратно и декодируйте их с помощью JSONDecoder в тип своей модели.
import Foundation
struct Note: Codable { let text: String }
let url = URL(fileURLWithPath: "/tmp/note.json")
if let data = try? Data(contentsOf: url),
let note = try? JSONDecoder().decode(Note.self, from: data) {
print(note.text)
}Атомарная запись
Параметр atomically: true сначала записывает данные во временный файл, а затем переименовывает его, поэтому читатели никогда не увидят файл, записанный лишь частично.
import Foundation
let url = URL(fileURLWithPath: "/tmp/safe.txt")
try? "important".write(to: url, atomically: true, encoding: .utf8)
print("Atomic write done")Обработка ошибок
Операции с файлами могут завершаться исключением. Используйте do/catch, чтобы обрабатывать отсутствие файлов и проблемы с разрешениями, а не завершать приложение с ошибкой.
import Foundation
let url = URL(fileURLWithPath: "/does/not/exist.txt")
do {
_ = try String(contentsOf: url, encoding: .utf8)
} catch {
print("Read failed: \(error.localizedDescription)")
}Добавление и перезапись
Обычный вызов write(to:) перезаписывает файл. Чтобы добавить данные в конец, откройте FileHandle и перейдите к концу файла перед записью.
import Foundation
let url = URL(fileURLWithPath: "/tmp/log.txt")
if let handle = try? FileHandle(forWritingTo: url) {
handle.seekToEndOfFile()
handle.write(Data("line\n".utf8))
try? handle.close()
}
print("Appended")Быстрая проверка
Что гарантирует параметр atomically: true при записи?
Итоги
Вы читали и записывали текст с помощью String(contentsOf:) и write(to:atomically:encoding:), работали с необработанными байтами через Data, сохраняли модели с помощью JSONEncoder/Decoder, использовали атомарную запись, обрабатывали ошибки и добавляли данные в конец с помощью FileHandle. Далее: управление каталогами.
Часто задаваемые вопросы
Урок «Чтение и запись данных» бесплатный?
Да — полный текст урока «Чтение и запись данных» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.
Чему я научусь в уроке «Чтение и запись данных»?
Сохраняйте данные и строки на диске. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Чтение и запись данных»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- URL и пути к файлам
- Чтение и запись данных
- Управление каталогами
- Каталоги песочницы приложения