ما هو UUID ولماذا تحتاجه في تطبيق iOS؟
\n\nتخيل أنك تقوم بإنشاء تطبيق للملاحظات. كل ملاحظة تحتاج إلى "جواز سفر" فريد لتمييزها عن غيرها. هذا الجواز في عالم البرمجة هو UUID (المعرف الفريد العالمي) — معرف فريد عالمي. في تطوير iOS باستخدام Swift، يعد توليد UUID مهمة أساسية ولكنها بالغة الأهمية، وسيواجهها كل مطور عاجلاً أم آجلاً.
\n\nعلى Stack Overflow، حصد سؤال "توليد UUID على iOS باستخدام Swift" آلاف المشاهدات. لماذا؟ لأن حتى المبرمجين ذوي الخبرة يخلطون أحيانًا: أي فئة يجب استخدامها؟ هل نحتاج إلى استيراد مكتبات إضافية؟ أي UUID يُعتبر "صحيحًا"؟
\n\nفي هذه المقالة، سنشرح كل شيء من البداية. ستتعلم كيفية توليد UUID على iOS باستخدام Swift، وستفهم الفرق بين إصدارات UUID، وستتعلم كيفية تطبيقها عمليًا. هيا بنا!
\n\nالأساسيات: كيفية توليد UUID في Swift بسطر واحد
\n\nأسهل طريقة للحصول على UUID في iOS هي استخدام الفئة المدمجة UUID من إطار العمل Foundation. وهي متاحة "مباشرة" ولا تتطلب استيرادًا إضافيًا.
مثال أساسي
\n\nimport Foundation\n\nlet myUUID = UUID()\nprint(myUUID.uuidString)\n// الإخراج: "E621E1F8-C36C-495A-93FC-0C247A3E6E5F"\n\nهذا كل شيء! لقد قمت للتو بتوليد UUID الإصدار 4 — معرف عشوائي من المرجح جدًا أن يكون فريدًا في الكون بأكمله. لاحظ الخاصية uuidString: فهي تُرجع سلسلة نصية بالتنسيق القياسي XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.
ما بداخل UUID؟
\n\nكائن UUID في Swift يخزن قيمة 128 بت. يمكنك الحصول عليها بشكلها الخام:
let uuid = UUID()\nlet uuidBytes = uuid.uuid // (UInt8, UInt8, ..., UInt8) — مجموعة من 16 بايت\nprint(uuidBytes.0) // البايت الأول\n\nلكن عمليًا، غالبًا ما يتم العمل بالتمثيل النصي.
\n\nUUID من سلسلة نصية: العملية العكسية
\n\nأحيانًا يكون لديك سلسلة نصية UUID (مثلًا من قاعدة بيانات أو API)، وتحتاج إلى إنشاء كائن UUID للعمل معه. يتيح لك Swift ذلك عبر المُهيئ:
let uuidString = "550e8400-e29b-41d4-a716-446655440000"\nif let uuid = UUID(uuidString: uuidString) {\n print("تم إنشاء UUID بنجاح: \\(uuid)")\n} else {\n print("تنسيق UUID غير صحيح")\n}\n\nلاحظ: المُهيئ يُرجع قيمة اختيارية. إذا كانت السلسلة لا تتوافق مع تنسيق UUID، ستحصل على nil. هذا يحمي كودك من البيانات غير الصحيحة.
مقارنة UUID: كيفية التحقق من التطابق
\n\nSwift يُطبق بروتوكول Equatable لـ UUID، لذا يمكن مقارنتها مباشرة:
let uuid1 = UUID()\nlet uuid2 = UUID()\nlet uuid3 = uuid1\n\nprint(uuid1 == uuid2) // false (UUID مختلفان)\nprint(uuid1 == uuid3) // true (نفس الكائن)\n\nهذا مفيد للبحث عن التكرارات أو التحقق من وجود المعرف في مجموعة.
\n\nUUID كمفتاح في القواميس والمجموعات
\n\nالفئة UUID تُطبق أيضًا بروتوكول Hashable، مما يسمح باستخدامها كمفتاح في القواميس وعنصر في المجموعات:
var userSessions: [UUID: String] = [:]\nlet sessionId = UUID()\nuserSessions[sessionId] = "جلسة مستخدم نشطة"\n\nlet allIds: Set<UUID> = [UUID(), UUID(), UUID()]\nprint(allIds.count) // 3\n\nهذه طريقة ممتازة لتنظيم البيانات إذا كنت بحاجة إلى مفاتيح فريدة مضمونة.
\n\nما هي إصدارات UUID؟ (ولماذا تهمك)
\n\nيحدد معيار UUID عدة إصدارات. في iOS باستخدام Swift، يتم توليد UUID الإصدار 4 (العشوائي) افتراضيًا. ولكن ماذا عن الإصدارات الأخرى؟
\n\n- \n
- UUID v1 — يعتمد على الوقت