0Pricing
Swift Academy · บทเรียน

SwiftData @Model และ ModelContext

กำหนดโมเดลด้วยมาโคร @Model และดำเนินการ CRUD ผ่าน ModelContext

SwiftData @Model และ ModelContext เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

บทนำสู่ SwiftData

SwiftData สำหรับ iOS 17 ขึ้นไป คือเฟรมเวิร์กการจัดเก็บข้อมูลถาวรสมัยใหม่ของ Apple ที่สร้างขึ้นให้เข้ากับ Swift โดยทำงานบน 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” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “SwiftData @Model และ ModelContext”

กำหนดโมเดลด้วยมาโคร @Model และดำเนินการ CRUD ผ่าน ModelContext คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 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. ความสัมพันธ์และ Fetch Descriptors
  4. การย้ายโครงสร้างแบบเบาและการซิงค์ CloudKit
← กลับไปที่ Swift Academy