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 الكامل بالعربي.