العمل مع YAML في Swift (iOS/macOS): مكتبة Yams
\n\nYAML (YAML Ain't Markup Language) هو تنسيق مناسب لتسلسل البيانات، يُستخدم غالبًا لملفات التكوين، وصف التبعيات (مثل docker-compose.yml)، وفي المشاريع التي تتطلب بنية بيانات قابلة للقراءة وموجزة. في نظام Apple البيئي، توجد عدة مكتبات للعمل مع YAML في Swift، لكن الأكثر شيوعًا واستقرارًا هي Yams — مكتبة سريعة وسهلة الاستخدام مكتوبة بلغة Swift الخالصة.
ما هي Yams؟
\n\nYams هي مكتبة مفتوحة المصدر توفر دعمًا كاملاً لتحليل وتسلسل YAML في Swift. وهي متوافقة مع iOS وmacOS وtvOS وwatchOS. تدعم Yams مواصفات YAML 1.2 وتسمح بتحويل سلاسل YAML إلى هياكل Swift (قواميس، مصفوفات، سلاسل، أرقام، قيم منطقية) والعكس.
\n\nالإمكانيات الرئيسية لـ Yams:
\n- \n
- تحليل سلسلة YAML إلى
Any(عادةً[String: Any]أو[Any]). \n - تسلسل كائنات Swift مرة أخرى إلى YAML. \n
- دعم الهياكل المتداخلة، المصفوفات، المستندات المتعددة. \n
- معالجة الأخطاء مع رسائل مفصلة. \n
- متوافقة تمامًا مع Swift Package Manager (SPM) وCocoaPods. \n
تثبيت Yams في المشروع
\n\nيمكنك تثبيت Yams عبر Swift Package Manager (موصى به) أو CocoaPods.
\n\nعبر Swift Package Manager
\n\n- \n
- في Xcode، اختر File → Add Packages. \n
- ألصق رابط المستودع:
https://github.com/jpsim/Yams.git\n - اختر الإصدار (يوصى بأحدث إصدار مستقر) واضغط Add Package. \n
أو أضف التبعية في Package.swift:
// swift-tools-version:5.7\nimport PackageDescription\n\nlet package = Package(\n name: "MyProject",\n dependencies: [\n .package(url: "https://github.com/jpsim/Yams.git", from: "5.0.0")\n ],\n targets: [\n .target(\n name: "MyProject",\n dependencies: ["Yams"])\n ]\n)\n\nعبر CocoaPods
\n\nأضف السطر التالي إلى ملف Podfile الخاص بك:
pod 'Yams', '~> 5.0'\n\nثم نفذ pod install.
الاستخدام الأساسي: تحليل YAML
\n\nبعد التثبيت، قم باستيراد المكتبة واستخدم Yams.load(yaml:) لتحليل السلسلة.
import Yams\n\nlet yamlString = """\nname: Swift\ntype: language\nversions:\n - 5.5\n - 5.6\n - 5.7\nfeatures:\n protocol_oriented: true\n value_semantics: true\n"""\n\ndo {\n if let data = try Yams.load(yaml: yamlString) as? [String: Any] {\n print("Name: \\(data["name"] ?? "")")\n print("Versions: \\(data["versions"] ?? [])")\n if let features = data["features"] as? [String: Bool] {\n print("Protocol oriented: \\(features["protocol_oriented"] ?? false)")\n }\n }\n} catch {\n print("خطأ في تحليل YAML: \\(error.localizedDescription)")\n}\n\nنتيجة التنفيذ:
\nName: Swift\nVersions: [5.5, 5.6, 5.7]\nProtocol oriented: true\n\nتسلسل كائنات Swift إلى YAML
\n\nللتحويل العكسي، استخدم Yams.dump(object:):
import Yams\n\nlet dictionary: [String: Any] = [\n "app": "MyApp",\n "version": 2.0,\n "features": ["dark_mode", "notifications"],\n "settings": [\n "autosave": true,\n "timeout": 30\n ]\n]\n\ndo {\n let yamlString = try Yams.dump(object: dictionary)\n print(yamlString)\n} catch {\n print("خطأ في التسلسل: \\(error.localizedDescription)")\n}\n\nالمخرجات:
\napp: MyApp\nfeatures:\n - dark_mode\n - notifications\nsettings:\n autosave: true\n timeout: 30\n