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

จำลองเครื่องสถานะด้วยอีนัม

แทนการเปลี่ยนสถานะของแอปอย่างปลอดภัยด้วยอีนัมของ Swift

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

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

Enumeration เหมาะอย่างยิ่งสำหรับจำลองเครื่องจักรสถานะแบบมีจำนวนสถานะจำกัด แต่ละกรณีคือสถานะ และการเปลี่ยนสถานะคือฟังก์ชันที่ส่งคืนสถานะถัดไป แนวทางนี้ทำให้ไม่สามารถแทนสถานะที่ไม่ถูกต้องได้

Enumeration สถานะแบบง่าย

```swift enum TrafficLight { case red, yellow, green func next() -> TrafficLight { switch self { case .red: return .green case .green: return .yellow case .yellow: return .red } } } var light = TrafficLight.red light = light.next() // .green ```

สถานะพร้อมข้อมูลที่เชื่อมโยง

```swift enum LoadState { case idle case loading(progress: Double) case loaded(T) case failed(Error) } var state: LoadState<[String]> = .idle state = .loading(progress: 0.5) state = .loaded(["alice","bob"]) ```

ฟังก์ชันเปลี่ยนสถานะ

```swift func transition(_ state: LoadState, event: AppEvent) -> LoadState { switch (state, event) { case (.idle, .startFetch): return .loading(progress: 0) case (.loading, .progress(let p)): return .loading(progress: p) case (.loading, .success(let d)): return .loaded(d) case (.loading, .error(let e)): return .failed(e) default: return state } } ```

เหตุใดจึงใช้เครื่องจักรสถานะแบบ Enumeration

ข้อดี: • `switch` ที่ครอบคลุมทุกกรณี — คอมไพเลอร์บังคับให้จัดการทุกสถานะ • ไม่สามารถสร้างการผสมที่ไม่ถูกต้องได้ เช่น `loaded` ที่ไม่มีข้อมูล • สถานะเป็นค่า — ทดสอบ คัดลอก และบันทึกได้ง่าย • ส่วนติดต่อผู้ใช้สามารถตรวจสอบสถานะและแสดงผลให้สอดคล้องกันได้

การแสดงผลส่วนติดต่อผู้ใช้จากสถานะ

```swift func render(_ state: LoadState<[User]>) { switch state { case .idle: showEmptyView() case .loading(let p): showProgress(p) case .loaded(let users): showList(users) case .failed(let err): showError(err) } } ```

เครื่องจักรสถานะของเครื่องเล่น

```swift enum PlayerState { case stopped case playing(track: String, position: TimeInterval) case paused(track: String, position: TimeInterval) } ``` มีเพียง `playing` และ `paused` เท่านั้นที่เก็บแทร็กไว้ ส่วน `stopped` ไม่มี ทำให้แบบจำลองอธิบายตัวเองได้

การป้องกันการเปลี่ยนสถานะที่ไม่ถูกต้อง

```swift extension PlayerState { mutating func play(track: String) { guard case .stopped = self else { return } self = .playing(track: track, position: 0) } mutating func pause() { if case .playing(let t, let p) = self { self = .paused(track: t, position: p) } } } ```

การทดสอบเครื่องจักรสถานะ

```swift func testLight() { var l = TrafficLight.red assert(l.next() == .green) assert(l.next().next() == .yellow) } ``` เครื่องจักรสถานะที่มีฟังก์ชันเปลี่ยนสถานะแบบบริสุทธิ์สามารถทดสอบเป็นหน่วยได้โดยตรง ไม่จำเป็นต้องใช้วัตถุจำลอง

การประกอบเครื่องจักรสถานะ

แอปขนาดใหญ่มักมีเครื่องจักรสถานะหลายตัวทำงานร่วมกัน: ```swift struct AppState { var auth: AuthState var data: LoadState<[Article]> var ui: UIState } ``` ประกอบเครื่องจักรเหล่านี้ไว้ในโครงสร้างสถานะรากเดียวสำหรับสถาปัตยกรรมรูปแบบ Flux/Redux

ตรวจสอบความเข้าใจอย่างรวดเร็ว

อะไรทำให้เครื่องจักรสถานะแบบ enumeration ปลอดภัยในระดับคอมไพเลอร์

สรุปทบทวน

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

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

บทเรียน “จำลองเครื่องสถานะด้วยอีนัม” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “จำลองเครื่องสถานะด้วยอีนัม”

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

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

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

บทเรียน “จำลองเครื่องสถานะด้วยอีนัม” ใช้เวลานานแค่ไหน

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

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

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

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

  1. ค่าดิบและ CaseIterable
  2. ค่าที่เชื่อมโยงสำหรับข้อมูลที่มีรายละเอียด
  3. อีนัมแบบ indirect และโครงสร้างแบบเวียนซ้ำ
  4. จำลองเครื่องสถานะด้วยอีนัม
← กลับไปที่ Swift Academy