العمل مع YAML في Swift (iOS/macOS)
YAML (YAML Ain't Markup Language) هو تنسيق مناسب لتسلسل البيانات، يُستخدم على نطاق واسع لملفات التكوين، وصف واجهات برمجة التطبيقات (API)، وتبادل البيانات. في نظام Swift البيئي لنظامي iOS وmacOS، تتوفر عدة مكتبات موثوقة لتحليل وإنشاء YAML. في هذه المقالة، سنستعرض المكتبتين الأكثر شيوعًا: Yams وYamlSwift. ستتعلم كيفية تثبيتهما في مشروعك، إجراء التحليل الأساسي، التسلسل، ومعالجة الأخطاء المحتملة.
1. نظرة عامة على المكتبات
Yams
Yams هي مكتبة حديثة للعمل مع YAML، مكتوبة بالكامل بلغة Swift. تدعم مواصفات YAML 1.2، وتتضمن محللاً معجمياً (lexer)، محللاً (parser)، وأدوات للتسلسل. Yams مدعومة بنشاط من المجتمع ومناسبة تمامًا للمشاريع التي تستخدم Swift Package Manager أو CocoaPods.
YamlSwift
YamlSwift هي مكتبة أخف وزنًا، مكتوبة أيضًا بالكامل بلغة Swift. توفر واجهة برمجة تطبيقات (API) بسيطة لتحليل سلاسل وملفات YAML. YamlSwift مثالية للسيناريوهات البسيطة التي لا تتطلب دعمًا كاملاً لجميع ميزات YAML.
2. التثبيت
يمكن تثبيت كلتا المكتبتين عبر Swift Package Manager (SPM) أو CocoaPods. سنستعرض كلا الخيارين.
التثبيت عبر Swift Package Manager (موصى به)
في Xcode، افتح File → Add Packages وألصق رابط المستودع:
- Yams:
https://github.com/jpsim/Yams.git - YamlSwift:
https://github.com/behrang/YamlSwift.git
اختر الإصدار المطلوب (يوصى بآخر إصدار مستقر) وأضف الحزمة إلى الـ target الخاص بك.
التثبيت عبر CocoaPods
أضف السطر التالي إلى ملف Podfile الخاص بك:
# لـ Yamspod 'Yams'
# لـ YamlSwiftpod 'YamlSwift'ثم نفذ الأمر pod install.
3. تحليل YAML باستخدام Yams
بعد التثبيت، قم باستيراد المكتبة في ملف Swift:
import Yamsالتحليل الأساسي لسلسلة نصية
لنفترض أن لدينا سلسلة YAML تحتوي على معلومات مستخدم:
let yamlString = """name: إيفان بيتروفage: 30languages: - Swift - Python - JavaScript"""يتم التحليل باستخدام الدالة Yams.load(yaml:):
do { if let result = try Yams.load(yaml: yamlString) as? [String: Any] { print("الاسم: \\(result["name"] ?? "")") print("العمر: \\(result["age"] ?? 0)") if let languages = result["languages"] as? [String] { print("اللغات: \\(languages.joined(separator: ", "))") } }} catch { print("خطأ في تحليل YAML: \\(error.localizedDescription)")}التحليل من ملف
لتحميل YAML من ملف في Bundle، استخدم:
guard let filePath = Bundle.main.path(forResource: "config", ofType: "yaml"), let yamlString = try? String(contentsOfFile: filePath, encoding: .utf8) else { fatalError("لم يتم العثور على ملف config.yaml")}
do { let config = try Yams.load(yaml: yamlString) as? [String: Any] // العمل مع config} catch { print("خطأ: \\(error)")}4. التسلسل (إنشاء YAML) باستخدام Yams
تسمح Yams أيضًا بتحويل كائنات Swift مرة أخرى إلى سلسلة YAML. استخدم الدالة Yams.dump(object:):
let dictionary: [String: Any] = [ "name": "آنا سميرنوفا", "age": 25, "skills": ["iOS", "macOS", "watchOS"]]
do { let yamlString = try Yams.dump(object: dictionary) print(yamlString)} catch { print("خطأ في التسلسل: \\(error)")}ستكون النتيجة كالتالي:
age: 25name: آنا سميرنوفاskills:-