0Pricing
Swift Academy · Урок

SwiftData @Model и ModelContext

Определяйте модели с помощью макроса @Model и выполняйте операции CRUD через ModelContext.

«SwiftData @Model и ModelContext» — бесплатный урок Swift Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Введение в SwiftData

SwiftData (iOS 17 и новее) — это современный нативный для Swift фреймворк Apple для сохранения данных, созданный поверх Core Data.

import SwiftData
// Main concepts: @Model, ModelContainer, ModelContext

Макрос @Model

Добавьте к классу аннотацию @Model, чтобы превратить его в сохраняемую модель SwiftData. Свойства автоматически становятся сохраняемыми атрибутами.

@Model
class Item {
  var name: String
  var createdAt: Date
  init(name: String) {
    self.name = name
    self.createdAt = Date()
  }
}

Настройка ModelContainer

Создайте ModelContainer с типами моделей и внедрите его в окружение SwiftUI.

@main
struct MyApp: App {
  var body: some Scene {
    WindowGroup {
      ContentView()
    }
    .modelContainer(for: Item.self)
  }
}

ModelContext в представлениях

Используйте @Environment(\.modelContext), чтобы получить доступ к контексту модели в представлении SwiftUI.

struct AddItemView: View {
  @Environment(\.modelContext) private var context
  func addItem() {
    context.insert(Item(name: "New Item"))
  }
}

Вставка и удаление

Вызовите context.insert, чтобы добавить модель, и context.delete, чтобы удалить её. По умолчанию изменения сохраняются автоматически.

let item = Item(name: "Coffee")
context.insert(item)   // add
context.delete(item)   // remove
// Auto-saved on next run loop

@Query для получения данных

@Query в представлениях SwiftUI автоматически получает данные и обновляет представление при изменении исходных данных.

struct ItemList: View {
  @Query(sort: \Item.createdAt, order: .reverse) var items: [Item]
  var body: some View {
    List(items) { item in Text(item.name) }
  }
}

Фильтрация с помощью предикатов

Передайте #Predicate в @Query, чтобы декларативно отфильтровать результаты.

@Query(filter: #Predicate<Item> { $0.name.contains("Swift") })
var swiftItems: [Item]

Ручное сохранение

Вызовите try context.save(), если нужен явный контроль над моментом сохранения изменений.

do {
  try context.save()
} catch {
  print("Save error: \(error)")
}

@Attribute для настройки

Используйте @Attribute для свойств, чтобы настроить поведение сохранения (например, уникальность или внешнее хранилище).

@Model
class User {
  @Attribute(.unique) var email: String
  @Attribute(.externalStorage) var avatar: Data?
  init(email: String) { self.email = email }
}

Свойства @Transient

Пометьте свойства с помощью @Transient, чтобы исключить их из сохранения.

@Model
class Session {
  var token: String
  @Transient var isExpired: Bool = false
  init(token: String) { self.token = token }
}

Настройка ModelContainer

Настройте контейнер с явной схемой и планом миграции для версионируемых моделей.

let schema = Schema([Item.self, User.self])
let config = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false)
let container = try ModelContainer(for: schema, configurations: config)

Быстрая проверка

Какая оболочка свойств SwiftUI автоматически получает модели SwiftData и обновляет представление при изменении данных?

Итоги урока

Добавляйте к классам аннотацию @Model, чтобы сделать их сохраняемыми. Настройте ModelContainer на уровне приложения. Читайте и записывайте данные через @Environment(\.modelContext). Реактивно получайте данные с помощью @Query. Фильтруйте их с помощью #Predicate.

Часто задаваемые вопросы

Урок «SwiftData @Model и ModelContext» бесплатный?

Да — полный текст урока «SwiftData @Model и ModelContext» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «SwiftData @Model и ModelContext»?

Определяйте модели с помощью макроса @Model и выполняйте операции CRUD через ModelContext. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «SwiftData @Model и ModelContext»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

  1. Стек Core Data: настройка NSPersistentContainer
  2. SwiftData @Model и ModelContext
  3. Связи и дескрипторы выборки
  4. Облегчённые миграции и синхронизация CloudKit
← Назад к Swift Academy