العمل مع نظام الملفات في Swift: للمبتدئين
العمل مع نظام الملفات هو إحدى المهام الأساسية عند تطوير التطبيقات لنظامي iOS وmacOS. سواء كان ذلك حفظ بيانات المستخدم، أو تخزين الصور مؤقتًا، أو تصدير المستندات، فستضطر حتمًا إلى التفاعل مع الملفات والمجلدات. في هذه المقالة، سنشرح الأدوات الرئيسية في Swift للعمل مع نظام الملفات، بما في ذلك FileManager، ومسارات الدلائل، وإنشاء الملفات وقراءتها وكتابتها وحذفها. المحتوى موجه للمطورين المبتدئين، لذا ستكون جميع الأمثلة بسيطة وواضحة قدر الإمكان.
الأساسيات: FileManager والمسارات
الفئة الرئيسية للعمل مع نظام الملفات في Swift هي FileManager. وهي غلاف لاستدعاءات النظام القياسية، وتوفر واجهة مريحة لإدارة الملفات والمجلدات. الأكثر استخدامًا هو المفرد (singleton) الخاص بها:
let fileManager = FileManager.defaultنظرًا لأن التطبيقات في iOS وmacOS تعمل في بيئة معزولة (sandbox)، فأنت بحاجة إلى معرفة أين يمكنك حفظ البيانات. الدلائل الرئيسية التي يمكن للتطبيق الوصول إليها هي:
- Documents — للمستندات والبيانات الخاصة بالمستخدم التي يجب الاحتفاظ بها بين عمليات التشغيل.
- Caches — للملفات المؤقتة التي يمكن للنظام حذفها لتوفير مساحة.
- Temporary — للملفات المؤقتة التي سيتم حذفها بالتأكيد عند إعادة تشغيل الجهاز التالية.
- Library/Application Support — للبيانات التي لا ينبغي أن تكون متاحة للمستخدم مباشرة، ولكن يجب الاحتفاظ بها.
يمكن الحصول على مسار الدليل المطلوب باستخدام الطريقة urls(for:in:):
// الحصول على مسار مجلد Documentslet documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!print("Documents path: \\(documentsURL.path)")
// الحصول على مسار مجلد Cacheslet cachesURL = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first!print("Caches path: \\(cachesURL.path)")
// الحصول على مسار المجلد المؤقتlet tempURL = fileManager.temporaryDirectoryprint("Temp path: \\(tempURL.path)")لاحظ: الطريقة تُرجع مصفوفة من URL (في حالة وجود مسارات متعددة)، ولكن بالنسبة للدلائل الخاصة بالمستخدم، عادةً ما يتم أخذ العنصر الأول. في Swift الحديث، يُوصى باستخدام URL بدلاً من مسارات النصوص، لأن ذلك أكثر أمانًا وراحة.
إنشاء وكتابة الملفات
الآن بعد أن عرفنا أين يمكننا حفظ الملفات، دعنا نتعلم كيفية إنشائها وكتابة البيانات فيها. لكتابة بيانات نصية، أسهل طريقة هي استخدام الطريقة write(to:atomically:encoding:) من الفئة String:
// إنشاء مسار الملف في مجلد Documentslet fileURL = documentsURL.appendingPathComponent("myFile.txt")
// النص المراد كتابتهlet content = "مرحبًا بالعالم! هذا أول ملف لي في Swift."
do { // كتابة السلسلة النصية إلى الملف try content.write(to: fileURL, atomically: true, encoding: .utf8) print("تم إنشاء الملف بنجاح: \\(fileURL.path)")} catch { print("خطأ في كتابة الملف: \\(error.localizedDescription)")}المعامل atomically: true يعني أن البيانات ستُكتب أولاً إلى ملف مؤقت، ثم يُعاد تسميته إلى الملف الهدف. هذا يحمي من تلف الملف في حالة حدوث عطل. للبيانات الثنائية (مثل الصور)، يمكن استخدام Data:
// إنشاء بيانات ثنائية (مثل مصفوفة بايتات)let data = Data([0x48, 0x65, 0x6C, 0x6C, 0x6F]) // "Hello" في ASCII
let binaryFileURL = documentsURL.appendingPathComponent("data.bin")
do { try data.write(to: binaryFileURL, options: .atomic) print("تم إنشاء الملف الثنائي")} catch { print("خطأ: \\(error)")}