Swift: ما هي، تركيبها ومفاهيمها الأساسية

المؤلف: IT Sectr نُشر: 2026-02-09 وقت القراءة: 8 دق

Swift هي لغة برمجة حديثة من Apple، تم تقديمها في WWDC 2014 كبديل لـ Objective-C. تجمع Swift بين السلامة النوعية والإدارة التلقائية للذاكرة ARC (Automatic Reference Counting) والنهج الموجه بالبروتوكولات. Swift Programming Language هو المصدر الرئيسي لبناء الجملة والمكتبة القياسية للغة.

أهم النقاط

  • Swift هي لغة مكتوبة بشكل ثابت مع استنتاج الأنواع و Optionals والبرمجة الموجهة بالبروتوكولات
  • Optionals — العمل الآمن مع nil عبر Optional Binding (if let) و Optional Chaining (?.)
  • ARC — العد التلقائي للمراجع لإدارة الذاكرة دون retain/release يدوي
  • Closures — دوال مجهولة تلتقط السياق، تُستخدم في واجهات callback والسلاسل الوظيفية
  • Struct vs Class — أنواع القيم مقابل أنواع المرجع بسلوك مختلف في التعيين والوراثة

ما هي Swift؟

Swift هي لغة برمجة متعددة النماذج طورتها Apple لأنظمة iOS وmacOS وwatchOS وtvOS وvisionOS. الأهداف الرئيسية للغة: الأمان والسرعة والتعبير التركيبي. تستخدم Swift مترجم LLVM وتولد كود آلة محسّن، يمكن مقارنته بالأداء مع C++.

منذ إصدارها في 2014، مرت Swift بـ 6 إصدارات رئيسية. قدم Swift 6 (2024) نموذجًا كاملاً لأمان تسابق البيانات من خلال التحكم الصارم في عزل الكود المتزامن. وفقًا لـ GitHub Octoverse 2025، تدخل Swift ضمن أفضل 10 لغات من حيث نمو المجتمع، متجاوزة Rust وKotlin في سرعة التبني على منصات Apple.

Swift هي مفتوحة المصدر ومتعددة المنصات — يتم نشر الكود المصدري على GitHub (Swift Open Source). بالإضافة إلى منصات Apple، تُستخدم Swift على Linux وWindows للتطوير الخادمي (Vapor, Hummingbird)، على الرغم أن مجالها الرئيسي يبقى التطوير المحمول وسطح المكتب في نظام Apple البيئي.

لماذا حلت Swift محل Objective-C

الأسباب الرئيسية للانتقال: تقضي Swift على فئات كاملة من الأخطاء الممكنة في Objective-C. السلامة النوعية تمنع عدم تطابق الأنواع في وقت الترجمة. Optionals تلغي إلغاء مرجع nil. ARC مدمج منذ اليوم الأول، على عكس MRC/ARC في Objective-C. تركيب Swift أقصر وأكثر قابلية للقراءة — تظهر الدراسات تقليص حجم الكود بنسبة 30-40% مقارنة بـ Objective-C للمهام المكافئة.

بناء الجملة والتراكيب الأساسية

بناء جملة Swift الأساسي يجمع بين التراكيب المألوفة الشبيهة بـ C وعناصر من اللغات الوظيفية. تُعلن المتغيرات بـ var، والثوابت بـ let. يستخدم المترجم استنتاج الأنواع، لذلك يتطلب التصريح النوعي الصريح فقط في حالات الغموض.

swift
import Foundation

// الثوابت والمتغيرات
let name = "Swift"
var version = 6.0
var count: Int = 42

// الدوال ذات المعاملات الافتراضية
func greet(person: String, greeting: String = "Hello") -> String {
    return "\(greeting), \(person)!"
}

// Guard-let للخروج المبكر
func parse(input: String?) -> Int {
    guard let value = input, let number = Int(value) else {
        return 0
    }
    return number
}

Switch ومطابقة الأنماط في Swift أقوى منها في C وKotlin. يدعم Switch المطابقة مع الصفوف tuple والنطاقات وشروط where وربط القيم. يتحقق المترجم من التغطية الشاملة لجميع الحالات — عدم وجود default ليس خطأ إذا كانت جميع القيم الممكنة مغطاة.

swift
let point = (x: 3, y: -1)

switch point {
case (0, 0):
    print("نقطة الأصل")
case let (x, y) where x == y:
    print("X يساوي Y")
case let (x, y) where abs(y) > x:
    print("القيمة المطلقة لـ Y أكبر من X")
default:
    print("النقطة (\(point.x), \(point.y))")
}

Optionals والعمل الآمن مع nil

Optionals هي مفهوم أساسي في Swift يحل مشكلة المراجع الفارغة على مستوى نظام الأنواع. Optional هو enum بحالتين: .none (nil) و .some(Wrapped). يمنع المترجم استخدام Optional دون فحص صريح، مما يلغي فئة كاملة من أخطاء وقت التشغيل.

swift
var optionalString: String? = "Hello"
optionalString = nil  // مسموح

// Optional Binding — الاستخراج الآمن
if let text = optionalString {
    print("النص: \(text)")
} else {
    print("القيمة غير موجودة")
}

// Optional Chaining — الوصول الآمن إلى الخصائص
let length = optionalString?.count ?? 0

// عامل nil-coalescing
let greeting = optionalString ?? "Default"

Optional Chaining مع العامل ?. يتيح استدعاء الطرق والوصول إلى خصائص قيمة اختيارية بأمان. إذا انقطعت السلسلة بـ nil، تكون نتيجة التعبير بالكامل nil. Nil-coalescing (??) يوفر قيمة افتراضية ويُستخدم على نطاق واسع في كود واجهة المستخدم لعرض نص placeholder.

البروتوكولات والإضافات

البروتوكولات في Swift تحدد عقدًا — مجموعة من الخصائص والطرق. على عكس واجهات Java، يمكن للبروتوكولات في Swift أن تحتوي على تطبيقات افتراضية عبر protocol extensions. هذا هو أساس البرمجة الموجهة بالبروتوكولات، النهج الموصى به من Apple بدلاً من وراثة الفئات.

swift
protocol NamedEntity {
    var name: String { get }
    func description() -> String
}

// تطبيق افتراضي عبر extension
extension NamedEntity {
    func description() -> String {
        return "Entity: \(name)"
    }
}

// المطابقة عبر extension
extension String: NamedEntity {
    var name: String { return self }
}

Protocol Extensions تسمح بإضافة طرق إلى بروتوكول دون تعديل كل نوع مطابق. هذا مفيد بشكل خاص لإضافة أدوات مساعدة شائعة: map وfilter وreduce لـ Sequence، أو Codable لتسلسل JSON. بنت Apple العديد من الأطر (SwiftUI, Combine) على البروتوكولات مع الإضافات.

الإغلاقات والسلاسل الوظيفية

الإغلاقات (Closures) في Swift هي دوال مجهولة تلتقط المتغيرات من السياق الخارجي. من حيث التركيب، تشبه الإغلاقات lambdas في Kotlin ولكن بتركيب أكثر مرونة: trailing closure وأسماء وسائط مختصرة ($0, $1) وautoclosures.

swift
// إغلاق مع التقاط السياق
let numbers = [5, 3, 8, 1, 9]

// Trailing closure syntax
let sorted = numbers.sorted { $0 < $1 }

// سلسلة وظيفية
let result = numbers
    .filter { $0 > 3 }
    .map { $0 * 2 }
    .reduce(0, +)

// إغلاق كمعامل دالة
func performAsync(completion: @escaping (Result<Data, Error>) -> Void) { }

إغلاقات @escaping تُستخدم عندما يتم تنفيذ الإغلاق بعد عودة الدالة — وهو أمر معتاد لطلبات الشبكة والعمليات غير المتزامنة. @autoclosure يلف تعبيرًا تلقائيًا في إغلاق، ويُستخدم في assert والمنطق القصير.

الهياكل والفئات: مقارنة

الاختيار بين struct وclass هو أحد القرارات الأولى عند تصميم نموذج Swift. توصي Apple باستخدام struct افتراضيًا (نوع قيمة) والتحول إلى class (نوع مرجع) فقط عند الحاجة إلى الوراثة أو الهوية المرجعية.

الخاصيةStructClass
نوع التمريربالقيمة (نسخ)بالمرجع
الوراثةغير مدعومةمدعومة
إدارة ARCغير مطلوبةARC (عدد المراجع)
deinitلانعم
قابلية التغييرmutating func لتعديل الخصائصأي طريقة يمكنها التغيير
التخزين في المجموعاتيُنسخ عند الإدراجتُخزن المرجع

أنواع القيم (struct) أكثر أمانًا في البيئات متعددة الخيوط — كل خيط يحصل على نسخة مستقلة. أنواع المرجع (class) ضرورية للعمل مع UIKit (UIView, UIViewController) حيث تتطلب الهوية المرجعية والوراثة من فئات النظام.

إدارة الذاكرة ARC

ARC (Automatic Reference Counting) هو نظام إدارة الذاكرة في Swift لأنواع المرجع. يقوم المترجم بإدراج استدعاءات retain/release في وقت التشغيل، متتبعًا عدد المراجع القوية لكائن. عندما يصل العداد إلى الصفر، يتم تحرير الكائن فورًا.

المشكلة الرئيسية لـ ARC هي الدورات المرجعية (retain cycles). عندما يحتفظ كائنان بمراجع قوية لبعضهما البعض، لا يتم تحرير الذاكرة أبدًا. الحل هو المراجع الضعيفة weak (تصبح nil تلقائيًا عند التحرير) والمراجع غير المملوكة unowned (تضمن أن الكائن حي).

swift
class ProfileViewController: UIViewController {
    var onLogout: (() -> Void)?
    
    func setupHandler() {
        // [weak self] يمنع retain cycle
        onLogout = { [weak self] in
            guard let self else { return }
            self.dismiss(animated: true)
        }
    }
}

لمنع الدورات المرجعية في الإغلاقات، استخدم [weak self] مع guard let self = self else { return }. هذه القاعدة مهمة بشكل خاص في UIKit، حيث يحتفظ ViewController بمراجع قوية لخصائصه والإغلاقات داخل تلك الخصائص تشير إلى ViewController.

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

ما أنواع البيانات الموجودة في Swift؟

تدعم Swift Int وDouble وFloat وString وBool وArray وSet وDictionary والصفوف (tuples). الأنواع الرقمية لها حجم ثابت: Int8 وInt16 وInt32 وInt64 وUInt غير الموقعة. للعمل مع التواريخ يُستخدم Date من Foundation، وللبيانات — Data.

ما هو Optional في Swift ولماذا هو مطلوب؟

Optional هو enum بحالتين: .none (nil) و .some(Wrapped). تتطلب Swift فحصًا صريحًا لـ Optional عبر if let أو guard let أو ??، مما يلغي NullPointerException. السلاسل الاختيارية (?.) تسمح بالوصول الآمن إلى خصائص القيم الاختيارية المتداخلة.

كيف يختلف struct عن class في Swift؟

Struct — نوع قيمة، يُنسخ عند التعيين، لا يدعم الوراثة، لا يتطلب ARC. Class — نوع مرجع، يُمرر بالمرجع، يدعم الوراثة ومزيلات التهيئة. توصي Apple باستخدام struct كنوع افتراضي.

كيف تعمل إدارة الذاكرة ARC في Swift؟

ARC تحسب تلقائيًا المراجع القوية لكائنات الفئات. عندما يصل العداد إلى الصفر، يتم تحرير الذاكرة. لمنع الدورات المرجعية، استخدم weak (nil تلقائي) و unowned (عمر مضمون). لا ينطبق ARC على struct ولا enum.

ما هي البرمجة الموجهة بالبروتوكولات في Swift؟

البرمجة الموجهة بالبروتوكولات هي نهج يستخدم البروتوكولات مع الإضافات بدلاً من التسلسل الهرمي للفئات. يمكن للبروتوكولات أن تحتوي على تطبيقات افتراضية للطرق عبر protocol extensions. هذا يسمح بإعادة استخدام الكود دون وراثة، مع الحفاظ على المرونة وقابلية الاختبار.

الخلاصة

  • Swift — لغة Apple مكتوبة بشكل ثابت مع Optionals وARC والبرمجة الموجهة بالبروتوكولات لتطوير iOS/macOS
  • Optionals — العمل الآمن مع nil عبر Optional Binding وOptional Chaining وعامل nil-coalescing
  • البروتوكولات + الإضافات — أساس البرمجة الموجهة بالبروتوكولات مع تطبيقات الطرق الافتراضية والتركيب
  • الإغلاقات — دوال مجهولة تلتقط السياق وتركيب trailing وقوائم الالتقاط لإدارة الذاكرة
  • Struct vs Class — أنواع القيم (النسخ، الأمان في الخيوط) مقابل أنواع المرجع (الوراثة، ARC)
  • ARC — العد التلقائي للمراجع مع معدّلات weak/unowned لمنع الدورات المرجعية
  • Switch ومطابقة الأنماط — تغطية شاملة، مطابقة الصفوف tuple والنطاقات وشروط where

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا