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

@EnvironmentObject สำหรับสถานะที่ใช้ร่วมกัน

ฉีดโมเดลที่ใช้ร่วมกันเข้าไปในลำดับชั้น View ที่อยู่ลึกได้โดยไม่ต้องส่งพร็อพเพอร์ตีต่อเนื่องกัน

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

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

`@EnvironmentObject` แทรกโมเดลที่ใช้ร่วมกันเข้าไปในมุมมองใด ๆ ภายในลำดับชั้น โดยไม่ต้องส่งค่าอย่างชัดเจน เหมาะอย่างยิ่งสำหรับสถานะระดับแอป เช่น การยืนยันตัวตนของผู้ใช้หรือการตั้งค่าธีม

การแทรกเข้าไปในลำดับชั้น

```swift struct App: App { @StateObject var authModel = AuthModel() var body: some Scene { WindowGroup { RootView().environmentObject(authModel) } } } ```

การใช้งานด้วย @EnvironmentObject

```swift struct ProfileView: View { @EnvironmentObject var auth: AuthModel var body: some View { Text("Hello, \(auth.username)!") } } // No init parameter needed — auto-injected from environment ```

แอปล่มเมื่อไม่มีออบเจ็กต์ในสภาพแวดล้อม

หากใช้ `@EnvironmentObject` โดยไม่ได้แทรกออบเจ็กต์ แอปจะล่มขณะทำงาน: ``` Fatal error: No ObservableObject of type AuthModel found. A View.environmentObject(_:) must be attached to ancestor. ```

EnvironmentObject ในตัวอย่างก่อนดู

```swift #Preview { ProfileView().environmentObject(AuthModel.mock) } ```

ออบเจ็กต์ในสภาพแวดล้อมหลายรายการ

```swift RootView() .environmentObject(authModel) .environmentObject(cartModel) .environmentObject(themeModel) ``` แต่ละชนิดจะใช้ชนิดของตนเองเป็นคีย์ จึงไม่มีความขัดแย้งของชื่อ

เปรียบเทียบ: @EnvironmentObject กับ @ObservedObject

• `@ObservedObject` — มีพารามิเตอร์เริ่มต้นอย่างชัดเจน ทำให้เห็นการพึ่งพาได้ชัดเจน • `@EnvironmentObject` — ไม่มีพารามิเตอร์เริ่มต้น แต่แทรกค่าโดยปริยาย ควรเลือกใช้ `@ObservedObject` เพื่อความชัดเจน และใช้ `@EnvironmentObject` สำหรับสถานะระดับส่วนกลางอย่างแท้จริง

การแทรกมุมมองที่ซ้อนกัน

```swift View A (.environmentObject(model)) └── View B (@EnvironmentObject var model) ✓ └── View C (@EnvironmentObject var model) ✓ — inherits ```

@Environment สำหรับค่าของระบบ

อย่าสับสนกับ `@Environment` ซึ่งไม่มีคำต่อท้าย Object: ```swift @Environment(\.colorScheme) var scheme // system dark/light @Environment(\.locale) var locale // current locale ```

รูปแบบการใช้งานจริง: AppModel

```swift @Observable class AppModel { var isLoggedIn = false var username = "" var cart: [Item] = [] } ``` แนวทางสมัยใหม่: แทรกโมเดลแอป `@Observable` เพียงหนึ่งรายการไว้ที่รากของลำดับชั้น

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

จะเกิดอะไรขึ้นหากใช้ `@EnvironmentObject` โดยไม่ได้แทรกออบเจ็กต์เข้าไป

สรุป

ประเด็นสำคัญ: • `.environmentObject(model)` แทรกโมเดลเข้าไปในต้นไม้ย่อยทั้งหมด • `@EnvironmentObject var m: ModelType` — ถูกแทรกโดยอัตโนมัติและไม่ต้องมีพารามิเตอร์ • ไม่มีการแทรกค่า = แอปล่มขณะทำงาน • อย่าลืมแทรกค่าในตัวอย่างก่อนดูด้วย • `@Environment(\.key)` ใช้สำหรับค่าของระบบ ซึ่งเป็น API คนละแบบ ถัดไป: แหล่งความจริงเพียงแหล่งเดียว

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

บทเรียน “@EnvironmentObject สำหรับสถานะที่ใช้ร่วมกัน” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “@EnvironmentObject สำหรับสถานะที่ใช้ร่วมกัน”

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

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

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

บทเรียน “@EnvironmentObject สำหรับสถานะที่ใช้ร่วมกัน” ใช้เวลานานแค่ไหน

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

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

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

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

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