0Pricing
Swift Academy · درس

الممثلون: حماية الحالة المشتركة القابلة للتعديل

استخدموا actor لتسلسل الوصول ومنع تسابق البيانات أثناء الترجمة.

الممثلون: حماية الحالة المشتركة القابلة للتعديل درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.

مرحبًا

تحمي Actors في Swift الحالة المشتركة القابلة للتغيير من الوصول المتزامن باستخدام *عزل 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() ``` تكون جميع الاستدعاءات العابرة لـ actors غير متزامنة؛ إذ تنتظر دور 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

يجب أن تتوافق الأنواع التي تُمرَّر عبر حدود actors مع `Sendable`: ```swift struct Message: Sendable { var text: String; var timestamp: Date } await actor.receive(message) // safe — Message is Sendable ```

Actor مقابل Class

| الميزة | Actor | Class | |---|---|---| | آمن للتزامن | ✓ | ✗ | | نوع مرجعي | ✓ | ✓ | | الوراثة | ✗ | ✓ | | الوصول غير المتزامن | ✓ | — |

لا يمكن لـ Actors الوصول إلى حالة جمود متبادل

على خلاف الأقفال، لا يمكن لـ actors الدخول في حالة جمود متبادل؛ لكنها قد تسبب *إعادة دخول actor* عندما ينتظر actor آخر، ثم يصل استدعاء ثانٍ في أثناء ذلك.

Actors العامة

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

اختبار سريع

لماذا يجب أن يستخدم الوصول الخارجي إلى خصائص actor الكلمة `await`؟

مراجعة

أهم النقاط: • تحمي Actors الحالة القابلة للتغيير — تنفّذ مهمة واحدة في كل مرة • يتطلب الوصول الخارجي استخدام `await` • استخدم `nonisolated` للأعضاء الآمنة غير المعزولة • `@MainActor` — يعمل على الخيط الرئيسي؛ استخدمه لواجهة المستخدم • يجب أن تكون الأنواع التي تعبر حدود actors من النوع `Sendable` اكتملت الدورة! التالي: Generics المتقدمة.

الأسئلة الشائعة

هل درس «الممثلون: حماية الحالة المشتركة القابلة للتعديل» مجاني؟

نعم — نص درس «الممثلون: حماية الحالة المشتركة القابلة للتعديل» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.

ماذا ستتعلم في «الممثلون: حماية الحالة المشتركة القابلة للتعديل»؟

استخدموا actor لتسلسل الوصول ومنع تسابق البيانات أثناء الترجمة. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟

لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «الممثلون: حماية الحالة المشتركة القابلة للتعديل»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟

نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. صياغة async/await واستدعاء الدوال غير المتزامنة
  2. ‏Task وإلغاء المهام
  3. ‏async let والمهام الابنة المتزامنة
  4. الممثلون: حماية الحالة المشتركة القابلة للتعديل
← العودة إلى Swift Academy