Swift Academy · บทเรียน

แหล่งความจริงเดียวและการไหลทางเดียว

ออกแบบแอป SwiftUI ด้วยโมเดลสถานะที่เป็นแหล่งข้อมูลหลักเพียงแห่งเดียว

บทเรียน 4 จาก 412 ขั้นตอน

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

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

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

หลักการ

``` State → View → Event → State mutation → View re-renders ``` มุมมองเป็นฟังก์ชันบริสุทธิ์ของสถานะ มุมมองไม่ได้ตัดสินใจว่าสถานะควรเป็นอย่างไร แต่มีหน้าที่แสดงสถานะและส่งเหตุการณ์ออกมาเท่านั้น

ส่วนติดต่อผู้ใช้ที่ขับเคลื่อนด้วยโมเดล

```swift struct AppState { var count = 0; var filter: Filter = .all } struct AppView: View { @State var state = AppState() var body: some View { CounterView(state: state, onIncrement: { state.count += 1 }) } } ```

หลีกเลี่ยงสถานะซ้ำซ้อน

```swift // ❌ Duplicate state — can drift out of sync: @State var isLoading = false @ObservedObject var viewModel: ViewModel // also has isLoading // ✓ Single source: @ObservedObject var viewModel: ViewModel // owns all state ```

รูปแบบการกระทำ/เหตุการณ์

```swift enum CounterAction { case increment, decrement, reset } func reduce(state: inout AppState, action: CounterAction) { switch action { case .increment: state.count += 1 case .decrement: state.count -= 1 case .reset: state.count = 0 } } ```

TCA (สถาปัตยกรรมแบบประกอบได้)

สถาปัตยกรรมแบบประกอบได้ (โอเพนซอร์ส) ทำให้รูปแบบนี้เป็นระบบใน Swift ด้วยตัวลดสถานะ เอฟเฟกต์ และที่เก็บสถานะ ซึ่งมีแนวคิดคล้าย Redux ใน React

หลีกเลี่ยงความขัดแย้งแบบสองทาง

```swift // ✓ Clear ownership: parent owns, child observes: struct Parent: View { @State private var text = "" var body: some View { Child(text: $text) } } struct Child: View { @Binding var text: String var body: some View { TextField("", text: $text) } } ```

ส่งต่อการเปลี่ยนแปลงขึ้นด้านบน

ใช้โคลเชอร์ (ฟังก์ชันเรียกกลับ) เพื่อส่งต่อเหตุการณ์ขึ้นด้านบน: ```swift struct Child: View { var onDelete: () -> Void var body: some View { Button("Delete", action: onDelete) } } ```

การทดสอบโค้ดแบบทิศทางเดียว

สถานะบริสุทธิ์และตัวลดสถานะบริสุทธิ์สามารถทดสอบได้โดยง่าย: ```swift var state = AppState() reduce(state: &state, action: .increment) XCTAssertEqual(state.count, 1) ```

ประโยชน์

• คาดเดาได้: สถานะเดียวกัน → ส่วนติดต่อผู้ใช้เดียวกัน • แก้ไขข้อผิดพลาดได้ง่าย: บันทึกทุกการกระทำและการเปลี่ยนแปลงสถานะ • ทดสอบได้: ไม่ต้องใช้ส่วนติดต่อผู้ใช้สำหรับการทดสอบตรรกะ • แก้ไขข้อผิดพลาดโดยย้อนเวลา: เล่นประวัติสถานะซ้ำ

ตรวจสอบความเข้าใจ

ในการไหลของข้อมูลแบบทิศทางเดียว อะไรเป็นตัวกระตุ้นให้เกิดการเปลี่ยนแปลงสถานะ

สรุปทบทวน

ประเด็นสำคัญ: • สถานะไหลลง ส่วนเหตุการณ์ไหลขึ้น • มีแหล่งข้อมูลอ้างอิงเดียว ไม่มีสถานะซ้ำซ้อน • ใช้การกระทำและตัวลดสถานะสำหรับตรรกะการเปลี่ยนสถานะที่ทดสอบได้ • ฟังก์ชันเรียกกลับส่งต่อเหตุการณ์จากลูกไปยังแม่ • สถานะบริสุทธิ์ + ตัวลดสถานะ = การทดสอบหน่วยที่ทำได้ง่าย จบหลักสูตรแล้ว! ถัดไป: เฟรมเวิร์ก Combine
เริ่มต้นได้ฟรี

เรียนรู้ Swift ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
122
บทเรียน
409

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

บทเรียน “แหล่งความจริงเดียวและการไหลทางเดียว” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “แหล่งความจริงเดียวและการไหลทางเดียว”

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

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

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

บทเรียน “แหล่งความจริงเดียวและการไหลทางเดียว” ใช้เวลานานแค่ไหน

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

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

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

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

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