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

แอกเตอร์: ปกป้องสถานะร่วมที่เปลี่ยนแปลงได้

ใช้ actor เพื่อจัดลำดับการเข้าถึงและป้องกันการแข่งขันของข้อมูลขณะคอมไพล์

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

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

Swift Actors ปกป้องสถานะที่เปลี่ยนแปลงร่วมกันจากการเข้าถึงพร้อมกันโดยใช้ *การแยกออกจาก actor* จึงทำงานพร้อมกันได้อย่างปลอดภัยโดยไม่ต้องใช้ล็อกแบบกำหนดเอง

การกำหนด Actor

```swift actor Counter { var count = 0 func increment() { count += 1 } func value() -> Int { count } } ```

การเข้าถึงสถานะของ Actor

```swift let counter = Counter() await counter.increment() // await required for external access let v = await counter.value() ``` การเรียกข้าม actor ทั้งหมดเป็นแบบอะซิงโครนัส โดยจะรอให้ถึงรอบการทำงานของ actor

การแยกข้อมูล

```swift actor BankAccount { private var balance: Double = 0 func deposit(_ amount: Double) { balance += amount } func withdraw(_ amount: Double) throws { guard amount <= balance else { throw BankError.insufficient } balance -= amount } } ```

nonisolated

```swift actor Config { nonisolated let appName: String = "CoddyKit" // safe to access without await var settings: [String:String] = [:] } let name = Config().appName // no await needed ```

@MainActor

```swift @MainActor class ViewController { var label = UILabel() func updateText(_ text: String) { label.text = text // guaranteed on main thread } } ``` `@MainActor` คือ actor พิเศษที่ทำงานบนเธรดหลัก

ข้อกำหนด Sendable

ประเภทที่ส่งข้ามขอบเขตของ actor ต้องสอดคล้องกับ `Sendable`: ```swift struct Message: Sendable { var text: String; var timestamp: Date } await actor.receive(message) // safe — Message is Sendable ```

Actor เทียบกับ Class

| คุณลักษณะ | Actor | Class | |---|---|---| | ปลอดภัยต่อการทำงานพร้อมกัน | ✓ | ✗ | | เป็นประเภทอ้างอิง | ✓ | ✓ | | การสืบทอด | ✗ | ✓ | | การเข้าถึงแบบ async | ✓ | — |

Actors ไม่เกิดภาวะติดตาย

ต่างจากล็อก actors ไม่สามารถทำให้เกิดภาวะติดตายได้ แต่อาจเกิด *การกลับเข้าทำงานซ้ำของ actor* เมื่อ actor หนึ่งรออีก actor และมีการเรียกครั้งที่สองเข้ามาระหว่างนั้น

Global Actors

```swift @globalActor struct DatabaseActor { static let shared = Actor() actor Actor {} } @DatabaseActor func save() { ... } ```

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

เหตุใดการเข้าถึงพร็อพเพอร์ตีของ actor จากภายนอกจึงต้องใช้ `await`

สรุป

ประเด็นสำคัญ: • Actors ปกป้องสถานะที่เปลี่ยนแปลงได้ โดยให้ทำงานทีละงาน • การเข้าถึงจากภายนอกต้องใช้ `await` • ใช้ `nonisolated` กับสมาชิกที่ปลอดภัยและไม่แยกออกจาก actor • `@MainActor` — ทำงานบนเธรดหลัก เหมาะสำหรับส่วนติดต่อผู้ใช้ • ประเภทที่ข้ามขอบเขตของ actor ต้องเป็น `Sendable` จบหลักสูตร! ถัดไป: Generics ขั้นสูง

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

บทเรียน “แอกเตอร์: ปกป้องสถานะร่วมที่เปลี่ยนแปลงได้” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “แอกเตอร์: ปกป้องสถานะร่วมที่เปลี่ยนแปลงได้”

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

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

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

บทเรียน “แอกเตอร์: ปกป้องสถานะร่วมที่เปลี่ยนแปลงได้” ใช้เวลานานแค่ไหน

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

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

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

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

  1. ไวยากรณ์ async/await และการเรียกฟังก์ชันแบบอะซิงโครนัส
  2. Task และการยกเลิก Task
  3. async let และงานลูกที่ทำงานพร้อมกัน
  4. แอกเตอร์: ปกป้องสถานะร่วมที่เปลี่ยนแปลงได้
← กลับไปที่ Swift Academy