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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- สแตก Core Data: การตั้งค่า NSPersistentContainer
- SwiftData @Model และ ModelContext
- ความสัมพันธ์และ Fetch Descriptors
- การย้ายโครงสร้างแบบเบาและการซิงค์ CloudKit