Codable في Swift: دليل شامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

Codable في Swift: دليل شامل مع أمثلة

1. ما هو Codable ولماذا تحتاجه؟

Codable هو بروتوكول مدمج (typealias من Encodable & Decodable) في لغة Swift، تم تقديمه في Swift 4. يوفر طريقة تصريحية لتسلسل (Serialization) وإلغاء تسلسل (Deserialization) أنواع البيانات المخصصة إلى صيغ مثل JSON و Property List (plist) وغيرها. بدلاً من كتابة كود معقد يدويًا لتحويل الهياكل (Structs) إلى قواميس (Dictionaries) والعكس، يتيح لك Codable توليد منطق التشفير/فك التشفير تلقائيًا بناءً على خصائص النموذج الخاص بك.

لماذا تحتاجه؟ في تطوير تطبيقات iOS/macOS الحديثة، يتفاعل كل تطبيق تقريبًا مع API الخادم، حيث يستقبل ويرسل البيانات بصيغة JSON. بدون Codable، سيضطر المطور إلى كتابة حلقات يدويًا، والتحقق من الأنواع، ومعالجة القيم الاختيارية (Optionals)، وكتابة محلل عكسي. يحل Codable هذه المشكلة، مما يجعل الكود أنظف وأكثر أمانًا ويقلل وقت التطوير بشكل كبير. كما أنه المعيار الفعلي للعمل مع JSON في نظام Apple البيئي.

يعمل Codable بناءً على بروتوكولي Encodable (للتحويل من نوع Swift إلى بيانات) و Decodable (للتحويل من بيانات إلى نوع Swift). بدمجهما، تحصل على دورة كاملة للتسلسل. المكتبة متكاملة بشكل وثيق مع JSONEncoder و JSONDecoder، وهما الأداتان الرئيسيتان للعمل مع JSON.

2. التثبيت

Codable هو جزء من المكتبة القياسية لـ Swift (Foundation). لا يتطلب أي تثبيت إضافي. لست بحاجة لاستخدام pip أو npm أو CocoaPods أو Swift Package Manager لتضمينه. فقط قم باستيراد Foundation في ملفك:

import Foundation

إذا كنت تستخدم Swift في بيئة Linux (عبر Swift Package Manager مثلاً)، فإن Codable متاح أيضًا بشكل افتراضي. بالنسبة لأطر العمل الخادمة مثل Vapor، يتم استخدام Codable بشكل تلقائي.

3. بداية سريعة — مثال عملي بسيط

لننشئ هيكل مستخدم بسيط ونقوم بتسلسله وإلغاء تسلسله إلى JSON.

import Foundation

// 1. تعريف النموذج المتوافق مع بروتوكول Codable
struct User: Codable {
    let id: Int
    let name: String
    let email: String
}

// 2. إنشاء كائن
let user = User(id: 1, name: "أحمد", email: "ahmed@example.com")

// 3. التشفير إلى JSON
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted // لعرض منسق

do {
    let jsonData = try encoder.encode(user)
    if let jsonString = String(data: jsonData, encoding: .utf8) {
        print("JSON: \n\(jsonString)")
    }

    // 4. فك التشفير والعودة للكائن الأصلي
    let decoder = JSONDecoder()
    let decodedUser = try decoder.decode(User.self, from: jsonData)
    print("المستخدم الذي تم فك تشفيره: \(decodedUser.name), البريد: \(decodedUser.email)")
} catch {
    print("خطأ: \(error)")
}

المخرجات في وحدة التحكم:

JSON:
{
  "id" : 1,
  "name" : "أحمد",
  "email" : "ahmed@example.com"
}
المستخدم الذي تم فك تشفيره: أحمد, البريد: ahmed@example.com

كما ترى، بضعة أسطر فقط من الكود — وتمت عملية التسلسل بنجاح.

4. الطرق/الدوال/الفئات الأساسية

دعنا نستعرض المكونات الرئيسية لـ Codable التي ستستخدمها باستمرار.

توصيات