Контрольная — Projects 10–12
Создай приложение, которое один раз загружает пользователей из JSON API, сохраняет их в SwiftData и показывает друзей каждого пользователя без повторной сети.
Требования
Codabletransport models для JSON;- SwiftData models
UserиFriendс relationship; - loading, error и content состояния;
- сортируемый список пользователей;
- detail screen с информацией и друзьями;
- повторный запуск читает локальную базу.
- HTTP status проверяется, запрос можно отменить и повторить;
- повторный import идемпотентен и не создаёт дубликаты.
Самостоятельная работа
Испытание
Задание
Построй import pipeline «download → decode → map → insert» и не смешивай его с layout-кодом.Что уже нужно знать
URLSession, async/await, Codable, SwiftData, relationships, predicates и navigation.Показать подсказку 1
Раздели transport struct и persistent class: серверная schema не обязана быть schema базы.
Показать подсказку 2
Перед загрузкой проверь `fetchCount`; если записи уже есть, не выполняй запрос повторно.
Показать решение
swift
let descriptor = FetchDescriptor<User>()
guard try context.fetchCount(descriptor) == 0 else { return }
let (data, response) = try await URLSession.shared.data(from: url)
guard let http = response as? HTTPURLResponse,
200..<300 ~= http.statusCode else {
throw URLError(.badServerResponse)
}
let remoteUsers = try JSONDecoder().decode([RemoteUser].self, from: data)
for remote in remoteUsers { context.insert(User(remote: remote)) }
try context.save()Дополнительно: проверь migration
Если приложение уже меняло schema между версиями, создай копию старого store и проверь открытие после migration. Для нового учебного проекта это необязательная production-практика: основной milestone считается завершённым без старой базы и migration plan.
После проверки начинается Advanced Topics: Instafilter →.
Комментарии
Вопросы, находки и подсказки по этой странице.
Войди, чтобы задать вопрос или помочь другим.