0Pricing
Swift Academy · Урок

Чтение и запись данных

Сохраняйте данные и строки на диске.

«Чтение и запись данных» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. URL и пути к файлам
  2. Чтение и запись данных
  3. Управление каталогами
  4. Каталоги песочницы приложения
← Назад к Swift Academy