تخطَّ إلى المحتوى

Codable

ترميز وفكّ JSON Codable

Codable بروتوكول يجعل Swift يحوّل نوعك تلقائيًا من وإلى JSON عبر JSONEncoder و JSONDecoder، دون كتابة كود تحويل يدوي.

Codable دمج لبروتوكولَي Encodable وDecodable. عندما تتبنّى struct بروتوكول Codable وكل خصائصها من أنواع تدعمه أصلًا (Int، String، مصفوفات، أنواع Codable أخرى...)، يولّد Swift كود الترميز والفكّ تلقائيًا.

JSONDecoder().decode(Type.self, from: data) يفكّ بيانات JSON إلى نسخة من النوع، وJSONEncoder().encode(value) يحوّل نسخة إلى بيانات JSON. كلاهما throws فيُستدعيان داخل do/try/catch. لو اختلف اسم مفتاح JSON عن اسم الخاصية، تُعرَّف CodingKeys لإعادة التسمية.

الصياغة

struct Name: Codable { let field: Type }

let value = try JSONDecoder().decode(Name.self, from: data)
let data = try JSONEncoder().encode(value)

📄 مثال

struct User: Codable {
    let id: Int
    let name: String
}

let json = "{ \"id\": 1, \"name\": \"براء\" }".data(using: .utf8)!
let user = try? JSONDecoder().decode(User.self, from: json)

أهم النقاط

العنصرالوظيفة
Codableدمج Encodable و Decodable معًا
JSONDecoderيحوّل بيانات JSON إلى نوع Swift
JSONEncoderيحوّل نوع Swift إلى بيانات JSON
CodingKeysتعداد لإعادة تسمية المفاتيح عند اختلافها عن أسماء الخصائص

💡 نصائح عملية

  • دع Swift يولّد التوافق تلقائيًا ما دامت أسماء الخصائص تطابق مفاتيح JSON — لا تكتب encode/decode يدويًا إلا عند الحاجة
  • الأنواع المتداخلة (struct بداخل struct آخر) تعمل مع Codable تلقائيًا طالما الكل يتبنّاه

⚠️ أخطاء شائعة

  • نسيان أن decode و encode كلاهما throws — تجاهل try/catch يسبّب خطأ ترجمة
  • اختلاف اسم الخاصية عن مفتاح JSON بدون CodingKeys يسبّب فشل الفكّ وقت التشغيل

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار SWIFT الكامل بالعربي.