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

@ObservableObject และ @StateObject

สร้างโมเดลชนิดอ้างอิงที่ขับเคลื่อน View ของ SwiftUI ผ่าน @Published

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

ยินดีต้อนรับ

สำหรับสถานะที่ซับซ้อนและใช้ร่วมกันในหลายมุมมอง ให้ใช้โมเดลชนิดอ้างอิงที่สอดคล้องกับ `ObservableObject` โดยมี `@StateObject` เป็นเจ้าของหรือใช้ `@ObservedObject` เฝ้าสังเกต

การกำหนด ObservableObject

```swift class CartModel: ObservableObject { @Published var items: [CartItem] = [] @Published var total: Double = 0 func add(_ item: CartItem) { items.append(item) } } ```

@StateObject — การเป็นเจ้าของ

```swift struct ShopView: View { @StateObject private var cart = CartModel() // owns the model var body: some View { CartList(cart: cart) } } ``` ใช้ `@StateObject` เมื่อมุมมองเป็นผู้สร้างและเป็นเจ้าของโมเดล

@ObservedObject — การเป็นเจ้าของจากภายนอก

```swift struct CartList: View { @ObservedObject var cart: CartModel // doesn't own; passed in var body: some View { List(cart.items) { item in Text(item.name) } } } ```

ความแตกต่าง

• `@StateObject` — มุมมองสร้างโมเดล และโมเดลจะคงอยู่ข้ามการแสดงผลใหม่ • `@ObservedObject` — โมเดลถูกส่งเข้ามา และองค์ประกอบแม่อาจสร้างโมเดลขึ้นใหม่ได้ การใช้ `@ObservedObject` ในกรณีที่ต้องใช้ `@StateObject` จะทำให้โมเดลถูกรีเซ็ตโดยไม่คาดคิด

การสมัครรับ objectWillChange

SwiftUI จะสมัครรับ `objectWillChange` โดยอัตโนมัติเมื่อใช้ `@StateObject` หรือ `@ObservedObject` การเปลี่ยนแปลงทุกครั้งของ `@Published` จะทำให้เกิดการแสดงผลใหม่

objectWillChange แบบกำหนดเอง

```swift class Timer: ObservableObject { var count = 0 func tick() { objectWillChange.send() // manual notification count += 1 } } ```

ObservableObject แบบซ้อนกัน

SwiftUI จะไม่เฝ้าสังเกต ObservableObject ที่ซ้อนกันโดยอัตโนมัติ ให้ส่งต่อการเปลี่ยนแปลงด้วยตนเอง: ```swift class Parent: ObservableObject { @Published var child = ChildModel() private var cancel: AnyCancellable? init() { cancel = child.objectWillChange.sink { [weak self] _ in self?.objectWillChange.send() } } } ```

มาโคร @Observable (ภาษาสวิฟต์ 5.9)

```swift @Observable class Counter { var count = 0 } // No ObservableObject, no @Published, no @StateObject needed // SwiftUI automatically tracks access ```

การทดสอบ ObservableObject

```swift func testCart() { let cart = CartModel() cart.add(CartItem(name:"Apple",price:1.0)) XCTAssertEqual(cart.items.count, 1) XCTAssertEqual(cart.total, 1.0) } ```

ตรวจสอบอย่างรวดเร็ว

ควรใช้ `@StateObject` และ `@ObservedObject` ในกรณีใดบ้าง

สรุป

ประเด็นสำคัญ: • `ObservableObject` + `@Published` = โมเดลแบบตอบสนองต่อการเปลี่ยนแปลง • `@StateObject` — มุมมองเป็นเจ้าของโมเดล และโมเดลคงอยู่ข้ามการแสดงผลใหม่ • `@ObservedObject` — โมเดลถูกส่งเข้ามาและมีเจ้าของจากภายนอก • `objectWillChange.send()` สำหรับการแจ้งเตือนด้วยตนเอง • มาโคร `@Observable` ในภาษาสวิฟต์ 5.9 เข้ามาแทนที่แนวทางส่วนใหญ่เหล่านี้ ถัดไป: @EnvironmentObject

คำถามที่พบบ่อย

บทเรียน “@ObservableObject และ @StateObject” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “@ObservableObject และ @StateObject” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

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

สร้างโมเดลชนิดอ้างอิงที่ขับเคลื่อน View ของ SwiftUI ผ่าน @Published คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “@ObservableObject และ @StateObject” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม

ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. @Binding: การไหลของข้อมูลสองทาง
  2. @ObservableObject และ @StateObject
  3. @EnvironmentObject สำหรับสถานะที่ใช้ร่วมกัน
  4. แหล่งความจริงเดียวและการไหลทางเดียว
← กลับไปที่ Swift Academy