ما هو Realm ولماذا نحتاجه؟
\n\nRealm هي قاعدة بيانات محمولة، تم إنشاؤها كبديل لـ Core Data و SQLite. على عكس قواعد البيانات العلائقية التقليدية، تعمل Realm كمخزن كائني التوجه: أنت تعمل مع كائنات Swift الأصلية، وليس مع استعلامات SQL أو NSManagedObject. تخزن Realm البيانات بتنسيقها الخاص، مما يوفر سرعة أداء قريبة من العمل مع الذاكرة العشوائية.
\n\nالمزايا الرئيسية لـ Realm:
\n- \n
- السرعة: تعمل Realm أسرع من 10 إلى 100 مرة من SQLite على الأجهزة المحمولة. \n
- البساطة: أنت تعمل مع كائنات Swift العادية، عن طريق توريثها من Realm.Object. \n
- التحديث التلقائي: يتم تحديث نتائج الاستعلامات (Results) تلقائيًا عند تغيير البيانات. \n
- الكائنات الحية: تتم مزامنة كائنات Realm تلقائيًا مع قاعدة البيانات. \n
- التعدد المنصات: يعمل Realm على iOS و macOS و tvOS و watchOS. \n
يعتبر Realm مثاليًا للتطبيقات التي تتطلب وصولاً سريعًا إلى البيانات على الجهاز: قوائم المهام، تطبيقات المراسلة، تخزين البيانات من الشبكة مؤقتًا، تطبيقات الملاحظات وغيرها الكثير.
\n\nتثبيت Realm في Swift
\n\nيتم تثبيت Realm لـ Swift عبر Swift Package Manager (SPM) أو CocoaPods أو Carthage. سننظر في الطريقتين الأكثر شيوعًا.
\n\nالتثبيت عبر Swift Package Manager (موصى به)
\n- \n
- في Xcode، افتح المشروع:
File → Add Packages...\n - أدخل الرابط:
https://github.com/realm/realm-swift.git\n - اختر الإصدار (يوصى بأحدث إصدار مستقر) واضغط
Add Package. \n - في النافذة التي تظهر، اختر الحزمة
RealmوRealmSwiftللبناء المستهدف الخاص بك. \n
التثبيت عبر CocoaPods
\nأضف إلى ملف Podfile:
\ntarget 'YourApp' do\n use_frameworks!\n pod 'RealmSwift'\nend\nثم نفذ في الطرفية:
\npod install\n\nالاستيراد في الكود
\nimport RealmSwift\n\nبداية سريعة: النموذج الأول وكتابة البيانات
\n\nلنقم بإنشاء نموذج مهمة بسيط وحفظه في قاعدة البيانات.
\n\nimport RealmSwift\n\n// 1. تعريف النموذج\nclass Task: Object {\n @Persisted var id: String = UUID().uuidString\n @Persisted var title: String = ""\n @Persisted var isCompleted: Bool = false\n @Persisted var createdAt: Date = Date()\n \n // المفتاح الأساسي (اختياري، لكن موصى به)\n override static func primaryKey() -> String? {\n return "id"\n }\n}\n\n// 2. حفظ الكائن\nlet task = Task()\ntask.title = "شراء البقالة"\ntask.isCompleted = false\n\nlet realm = try! Realm()\ntry! realm.write {\n realm.add(task)\n}\n\n// 3. قراءة جميع المهام\nlet tasks = realm.objects(Task.self)\nfor task in tasks {\n print("\\(task.title) - \\(task.isCompleted ? "مكتملة" : "غير مكتملة")")\n}\n\nالطرق والوظائف الأساسية لـ Realm
\n\nفيما يلي الطرق الرئيسية للعمل مع Realm. كل طريقة مصحوبة بوصف ومعلمات ومثال عملي.
\n\n1. Realm() — تهيئة قاعدة البيانات
\nما تفعله: تنشئ أو تفتح قاعدة بيانات Realm موجودة. افتراضيًا، يوجد ملف قاعدة البيانات في دليل Documents الخاص بالتطبيق.
\nالمعلمات: configuration: Realm.Configuration? — تكوين اختياري (رابط الملف، المخطط، إصدار الترحيل).
// التهيئة القياسية\nlet realm = try! Realm()\n\n// التهيئة برابط مخصص\nlet config = Realm.Configuration(fileURL: FileManager.default\n .urls(for: .documentDirectory, in: .userDomainMask)\n .first?.appendingPathComponent("myrealm.realm"))\nlet customRealm = try! Realm(configuration: config)\n\n