الترحيل إلى التزامن الصارم
اعتمد فحص التزامن في Swift 6 تدريجيًا.
الترحيل إلى التزامن الصارم درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
ما التزامن الصارم؟
يجعل التحقق الصارم من التزامن المصرّف يشخّص كل سباق بيانات محتمل في وقت الترجمة.
يكون هذا التحقق مفعّلًا افتراضيًا في نمط لغة Swift 6، بينما يمكنك تفعيله تدريجيًا في نمط Swift 5.
مستويات التحقق الثلاثة
يمتلك الخيار -strict-concurrency ثلاثة مستويات: minimal (الافتراضي في Swift 5)، وtargeted (يتحقق من الشيفرة التي تستخدم التزامن بالفعل)، وcomplete (تحقق كامل بأسلوب Swift 6).
// Build settings example
// SWIFT_STRICT_CONCURRENCY = completeالتبنّي التدريجي
المسار الموصى به هو التدرج بين المستويات: ابدأ بـ targeted، وأصلح التحذيرات، ثم انتقل إلى complete قبل تبديل نمط اللغة إلى 6.
يساعد ذلك على إبقاء عملية الترحيل قابلة للإدارة في قواعد الشيفرة الكبيرة.
// Step 1: targeted
// Step 2: complete (warnings)
// Step 3: Swift 6 mode (errors)ترحيل كل وحدة على حدة
يُضبط التزامن الصارم لكل هدف. ويمكنك ترحيل وحدة واحدة في كل مرة، مع إبقاء الوحدات الأخرى على نمط Swift 5 إلى أن تصبح جاهزة.
// Package.swift target
// swiftSettings: [.enableExperimentalFeature("StrictConcurrency")]تحذير شائع: التقاط قيمة غير متوافقة مع Sendable
أكثر التشخيصات شيوعًا هو التقاط قيمة غير متوافقة مع Sendable داخل Task أو إرسالها عبر حدود actor.
أصلح ذلك بجعل النوع متوافقًا مع Sendable أو بنسخ بيانات متوافقة مع Sendable فقط.
final class Model { var name = "" }
func start(_ m: Model) {
// Warning: non-Sendable Model captured by Task
// Task { print(m.name) }
}الإصلاح باستخدام أنواع القيم
غالبًا ما يكون أنظف إصلاح هو نمذجة البيانات كنوع قيمة غير قابل للتغيير، إذ يمتثل Sendable تلقائيًا.
struct Model: Sendable { let name: String }
func start(_ m: Model) {
Task { print(m.name) } // safe now
}الإصلاح باستخدام @MainActor
تُصدر أنواع واجهة المستخدم تحذيرات غالبًا لأنها تُستخدم من مهام تعمل في الخلفية. يؤدي وضع التعليق @MainActor على النوع إلى تثبيته على الخيط الرئيسي وحل التحذيرات.
@MainActor
final class ViewModel {
var items: [String] = []
func reload() async {
let fetched = await load()
items = fetched
}
}
func load() async -> [String] { [] }امتثال Sendable للأنواع الموجودة
بالنسبة إلى الأنواع التي تتحكم فيها والآمنة بالفعل مع الخيوط، أضف امتثالًا صريحًا لـ Sendable أو @unchecked Sendable لإسكات التحذيرات بصدق.
import Foundation
final class Counter: @unchecked Sendable {
private let lock = NSLock()
private var n = 0
}عمليات الاستيراد preconcurrency
عندما لا تكون إحدى التبعيات قد أضافت التعليقات إلى واجهة API الخاصة بها بعد، يخفف @preconcurrency import عمليات التحقق الخاصة بتلك الوحدة، فيحوّل الأخطاء إلى تحذيرات إلى أن يتم تحديثها.
@preconcurrency import SomeLegacyFrameworkوضع الوسم @preconcurrency على الرموز
يمكنك أيضًا وضع الوسم @preconcurrency على إعلانات فردية، حتى لا تتلقى الاستدعاءات من الشيفرة الأقدم أخطاءً عند إضافة متطلبات Sendable.
@preconcurrency
func handle(_ value: Sendable) { }التحقق من الترحيل
عندما ينتج التحقق complete صفرًا من التحذيرات، بدّل الهدف إلى نمط Swift 6، لتصبح الضمانات أخطاءً مفروضة ولا يمكن أن تتراجع.
// Package.swift
// .target(name: "App", swiftSettings: [.swiftLanguageMode(.v6)])تحقق سريع: الترحيل
اختبر مدى فهمك لترحيل التزامن الصارم.
مراجعة: الترحيل إلى التزامن الصارم
ينقل التحقق الصارم من التزامن اكتشاف سباقات البيانات إلى وقت الترجمة، عبر المستويات minimal وtargeted وcomplete. رحّل كل وحدة على حدة، وأصلح عمليات التقاط القيم غير المتوافقة مع Sendable باستخدام أنواع القيم أو @MainActor أو امتثال Sendable الصريح، واستخدم @preconcurrency لتسهيل التشغيل البيني مع التبعيات التي لم تُرحّل.
بعد أن يصبح complete خاليًا من التحذيرات، فعّل نمط Swift 6 لتثبيت هذه الضمانات.
الأسئلة الشائعة
هل درس «الترحيل إلى التزامن الصارم» مجاني؟
نعم — نص درس «الترحيل إلى التزامن الصارم» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «الترحيل إلى التزامن الصارم»؟
اعتمد فحص التزامن في Swift 6 تدريجيًا. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «الترحيل إلى التزامن الصارم»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- مشكلة سباق البيانات
- بروتوكول Sendable
- عزل Actor و nonisolated
- الترحيل إلى التزامن الصارم