0Pricing
Swift Academy · درس

المطابقة مع Codable

اجعل الأنواع قابلة للترميز وفك الترميز تلقائيًا.

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

ما Codable؟

إن Codable هو اسم مستعار للنوع Encodable & Decodable. وعندما يتوافق نوع ما معه، تستطيع Swift تحويل مثيلاته إلى بيانات خارجية (مثل JSON) وإعادة بنائها مرة أخرى، من دون الحاجة إلى كتابة شيفرة تحليل يدوي.

import Foundation

struct Book: Codable {
    var title: String
    var pages: Int
}

print("Book conforms to Codable")

التوليد التلقائي

إذا كانت كل خاصية مخزنة بحد ذاتها من النوع Codable، فإن المترجم يولّد منطق الترميز وفك الترميز نيابةً عنك. ما عليك سوى كتابة قائمة الخصائص، وسيتولى Swift الباقي.

import Foundation

struct User: Codable {
    var name: String
    var age: Int
    var isActive: Bool
}

let u = User(name: "Ada", age: 36, isActive: true)
print(u)

الترميز إلى بيانات JSON

يمكن تمرير قيمة من النوع Codable إلى JSONEncoder، الذي ينتج كتلة من Data. حوّل تلك Data إلى String لفحص نص JSON.

import Foundation

struct User: Codable {
    var name: String
    var age: Int
}

let u = User(name: "Ada", age: 36)
let data = try JSONEncoder().encode(u)
print(String(data: data, encoding: .utf8)!)

فك الترميز من بيانات JSON

تستخدم الرحلة العكسية JSONDecoder. مرّر إليه النوع الهدف وData الخام، وسيعيد بناء قيمة Swift محددة النوع بالكامل.

import Foundation

struct User: Codable {
    var name: String
    var age: Int
}

let json = "{\"name\":\"Ada\",\"age\":36}"
let data = json.data(using: .utf8)!
let u = try JSONDecoder().decode(User.self, from: data)
print(u.name, u.age)

إجراء دورة ترميز وفك ترميز لقيمة

من المفترض أن تعيد عملية الترميز ثم فك الترميز قيمة مساوية للقيمة الأصلية. وتُعد هذه الدورة السريعة طريقةً للتحقق من أن توافق النوع مع Codable يعمل كما هو متوقع.

import Foundation

struct Point: Codable {
    var x: Int
    var y: Int
}

let p = Point(x: 3, y: 7)
let data = try JSONEncoder().encode(p)
let back = try JSONDecoder().decode(Point.self, from: data)
print(back.x, back.y)

Encodable فقط

يمكنك التوافق مع أحد الجزأين فقط. يعني Encodable أن النوع يمكن كتابته، لكن لا يمكن قراءته مجددًا، وهو مفيد لنماذج الاستجابات التي لا تحتاج إلى تحليلها.

import Foundation

struct Receipt: Encodable {
    var item: String
    var total: Double
}

let r = Receipt(item: "Coffee", total: 4.5)
let data = try JSONEncoder().encode(r)
print(String(data: data, encoding: .utf8)!)

Decodable فقط

وبالمثل، يتيح Decodable إنشاء النوع من بيانات خارجية من دون إمكانية ترميزه. وهذا مفيد لحمولات API للقراءة فقط التي تستهلكها دون تعديل.

import Foundation

struct Config: Decodable {
    var version: Int
    var debug: Bool
}

let json = "{\"version\":2,\"debug\":true}"
let data = json.data(using: .utf8)!
let c = try JSONDecoder().decode(Config.self, from: data)
print(c.version, c.debug)

أنواع الخصائص المدعومة

تتوافق أنواع المكتبة القياسية مثل String وInt وDouble وBool وDate وData وURL، بالإضافة إلى المصفوفات والقواميس التي تحتوي على عناصر Codable، مع Codable تلقائيًا.

import Foundation

struct Profile: Codable {
    var name: String
    var tags: [String]
    var scores: [String: Int]
}

let p = Profile(name: "Sam", tags: ["a", "b"], scores: ["math": 90])
let data = try JSONEncoder().encode(p)
print(String(data: data, encoding: .utf8)!)

يمكن للتعدادات التوافق أيضًا

يصبح التعداد الذي له قيم خام، مثل String أو Int، من النوع Codable تلقائيًا. ويُرمّز في JSON باستخدام قيمته الخام.

import Foundation

enum Status: String, Codable {
    case active, paused, done
}

struct Task: Codable {
    var title: String
    var status: Status
}

let t = Task(title: "Ship", status: .active)
let data = try JSONEncoder().encode(t)
print(String(data: data, encoding: .utf8)!)

يجب أن تكون الخاصية Codable

لا يعمل التوليد إلا عندما تكون كل الخصائص المخزنة من النوع Codable. وإذا استُخدم نوع مخصص كخاصية، فيجب أن يتوافق ذلك النوع أيضًا؛ وإلا يرفض المترجم التوليد.

import Foundation

struct Address: Codable {
    var city: String
}

struct Person: Codable {
    var name: String
    var address: Address
}

let p = Person(name: "Lee", address: Address(city: "Rome"))
print(try JSONEncoder().encode(p).count, "bytes")

لماذا يُعد Codable مهمًا

يلغي Codable الشيفرة التكرارية الخاصة بالتسلسل المكتوبة يدويًا، ويجعل النوع مصدر الحقيقة الوحيد، ويكتشف حالات عدم التطابق وقت الترجمة. وهو الطريقة القياسية لنقل البيانات من تطبيقات Swift وإليها.

import Foundation

struct Settings: Codable {
    var theme: String
    var fontSize: Int
}

let s = Settings(theme: "dark", fontSize: 14)
let data = try JSONEncoder().encode(s)
let back = try JSONDecoder().decode(Settings.self, from: data)
print(back.theme, back.fontSize)

اختبار سريع: التوافق مع Codable

اختبر ما تعلمته عن التوافق.

مراجعة: التوافق مع Codable

لقد تعلمت أساسيات تسلسل البيانات في Swift:

  • Codable = Encodable & Decodable.
  • يُولَّد التوافق عندما تكون جميع الخصائص من النوع Codable.
  • ينتج JSONEncoder قيمة Data، بينما يعيد JSONDecoder بناء القيمة.
  • الأنواع القياسية والتعدادات ذات القيم الخام والأنواع المتداخلة من Codable كلها مدعومة.

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

هل درس «المطابقة مع Codable» مجاني؟

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

ماذا ستتعلم في «المطابقة مع Codable»؟

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

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

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

كم من الوقت يستغرق درس «المطابقة مع Codable»؟

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

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

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

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

  1. المطابقة مع Codable
  2. الترميز باستخدام JSONEncoder
  3. فك الترميز باستخدام JSONDecoder
  4. التعامل مع الأنواع الاختيارية والمتداخلة
← العودة إلى Swift Academy