العمل مع YAML في Swift: مكتبة Yams لنظامي iOS/macOS

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع YAML في Swift (iOS/macOS): مكتبة Yams

\n\n

YAML (YAML Ain't Markup Language) هو تنسيق مناسب لتسلسل البيانات، يُستخدم غالبًا لملفات التكوين، وصف التبعيات (مثل docker-compose.yml)، وفي المشاريع التي تتطلب بنية بيانات قابلة للقراءة وموجزة. في نظام Apple البيئي، توجد عدة مكتبات للعمل مع YAML في Swift، لكن الأكثر شيوعًا واستقرارًا هي Yams — مكتبة سريعة وسهلة الاستخدام مكتوبة بلغة Swift الخالصة.

\n\n

ما هي Yams؟

\n\n

Yams هي مكتبة مفتوحة المصدر توفر دعمًا كاملاً لتحليل وتسلسل 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
\n\n

تثبيت Yams في المشروع

\n\n

يمكنك تثبيت Yams عبر Swift Package Manager (موصى به) أو CocoaPods.

\n\n

عبر Swift Package Manager

\n\n
    \n
  1. في Xcode، اختر File → Add Packages.
  2. \n
  3. ألصق رابط المستودع: https://github.com/jpsim/Yams.git
  4. \n
  5. اختر الإصدار (يوصى بأحدث إصدار مستقر) واضغط Add Package.
  6. \n
\n\n

أو أضف التبعية في Package.swift:

\n\n
// 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 الخاص بك:

\n\n
pod 'Yams', '~> 5.0'
\n\n

ثم نفذ pod install.

\n\n

الاستخدام الأساسي: تحليل YAML

\n\n

بعد التثبيت، قم باستيراد المكتبة واستخدم Yams.load(yaml:) لتحليل السلسلة.

\n\n
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

نتيجة التنفيذ:

\n
Name: Swift\nVersions: [5.5, 5.6, 5.7]\nProtocol oriented: true
\n\n

تسلسل كائنات Swift إلى YAML

\n\n

للتحويل العكسي، استخدم Yams.dump(object:):

\n\n
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

المخرجات:

\n
app: MyApp\nfeatures:\n  - dark_mode\n  - notifications\nsettings:\n  autosave: true\n  timeout: 30\n                    

توصيات