ShareLink في Swift: دليل شامل مع أمثلة تطبيقية

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

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

ابدأ الدورة

ShareLink في Swift: دليل شامل مع أمثلة تطبيقية

ShareLink هي بنية مدمجة في إطار عمل SwiftUI، مصممة لإنشاء أزرار "مشاركة" في تطبيقات Swift. توفر واجهة بسيطة وبديهية لدمج ورقة المشاركة النظامية (UIActivityViewController) دون الحاجة لكتابة كود UIKit معقد. ظهرت هذه المكتبة في iOS 16 وmacOS 13 وtvOS 16 وwatchOS 9، وأصبحت منذ ذلك الحين الطريقة القياسية لتنفيذ مشاركة المحتوى في تطبيقات SwiftUI الحديثة.

لماذا تحتاج ShareLink؟ في عالم اليوم، يشارك المستخدمون المحتوى باستمرار: روابط، صور، نصوص، ملفات. يتطلب التنفيذ اليدوي للمشاركة إنشاء UIActivityViewController، وإعداد المندوبين (delegates)، ومعالجة أنواع البيانات المختلفة. تتولى ShareLink كل هذا العمل نيابة عنك، حيث توفر مكون SwiftUI جاهزًا يتكيف تلقائيًا مع النظام الأساسي وإعدادات النظام. هذا لا يسرّع عملية التطوير فحسب، بل يضمن أيضًا تجربة مستخدم موحدة عبر جميع أجهزة Apple.

هذه المكتبة مثالية لـ: تطبيقات التواصل الاجتماعي (مشاركة المنشورات)، تجميع الأخبار (مشاركة المقالات)، محررات الصور (تصدير الصور)، تطبيقات المراسلة (إرسال الملفات)، وأي تطبيق آخر يتطلب وظيفة "مشاركة". تدعم ShareLink جميع أنواع البيانات القياسية: النصوص، عناوين URL، الصور، الملفات، والعناصر المخصصة التي تتوافق مع بروتوكول Transferable.

التثبيت

ShareLink هي جزء من إطار عمل SwiftUI، وبالتالي لا تتطلب تثبيتًا منفصلاً عبر مديري الحزم. للاستخدام، يكفي استيراد SwiftUI إلى مشروعك:

import SwiftUI

الحد الأدنى من المتطلبات:

  • iOS 16.0+ / macOS 13.0+ / tvOS 16.0+ / watchOS 9.0+
  • Xcode 14.0+
  • Swift 5.7+

إذا كنت تستخدم إصدارات أقدم من iOS، فستحتاج إلى استخدام UIActivityViewController مباشرة عبر UIViewRepresentable.

بداية سريعة

أسهل طريقة لاستخدام ShareLink هي تمرير نص أو عنوان URL إليها. إليك مثال عملي بسيط:

import SwiftUI

struct ContentView: View {
    var body: some View {
        ShareLink(item: URL(string: "https://pythonlib.ru")!) {
            Label("مشاركة الرابط", systemImage: "square.and.arrow.up")
        }
        .padding()
    }
}

يقوم هذا الكود بإنشاء زر مع أيقونة "مشاركة". عند الضغط عليه، تظهر ورقة المشاركة النظامية حيث يمكن للمستخدم اختيار التطبيق لإرسال الرابط.

الدوال والفئات الرئيسية

توفر ShareLink عدة مُهيئات (initializers) ومُعدّلات (modifiers) للتخصيص. دعنا نستعرض 8 إمكانيات رئيسية.

1. ShareLink(item:)

التوقيع: init(item: T, subject: Text? = nil, message: Text? = nil, @ViewBuilder label: () -> Label)

الوظيفة: تنشئ زر مشاركة لعنصر واحد. يمكن أن يكون المعامل item نصًا أو عنوان URL أو صورة أو أي نوع يتوافق مع بروتوكول Transferable.

ShareLink(item: "مرحبًا بالعالم!") {
    Text("مشاركة النص")
}

2. ShareLink(items:)

التوقيع: init(items: [T], subject: Text? = nil, message: Text? = nil, @ViewBuilder label: () -> Label)

الوظيفة: تسمح بمشاركة عدة عناصر في وقت واحد (مثل مصفوفة من الصور).

let images = [UIImage(named: "photo1")!, UIImage(named: "photo2")!]
ShareLink(items: images) {
    Label("مشاركة الصور", systemImage: "photo.on.rectangle")
}

3. ShareLink(item:preview:)

التوقيع: init(item: T, preview: SharePreview<T>, @ViewBuilder label: () -> Label)

الوظيفة: تنشئ زر مشاركة مع معاينة مخصصة للمحتوى المراد مشاركته.

let url = URL(string: "https://example.com")!
ShareLink(item: url, preview: SharePreview("موقع رائع", image: Image(systemName: "globe"))) {
    Label("مشاركة الموقع", systemImage: "square.and.arrow.up")
}

4. ShareLink(subject:message:)

التوقيع: init(subject: Text? = nil, message: Text? = nil, @ViewBuilder label: () -> Label)

الوظيفة: تسمح بتحديد موضوع ورسالة افتراضية للمشاركة.

ShareLink(subject: Text("موضوع رائع"), message: Text("تحقق من هذا المحتوى!")) {
    Text("مشاركة مع موضوع")
}

5. ShareLink(item:subject:message:)

التوقيع: init(item: T, subject: Text? = nil, message: Text? = nil, @ViewBuilder label: () -> Label)

الوظيفة: تجمع بين العنصر والموضوع والرسالة في مهيئ واحد.

ShareLink(item: "نص مهم", subject: Text("موضوع"), message: Text("رسالة")) {
    Text("مشاركة كاملة")
}

6. تخصيص المظهر باستخدام .buttonStyle()

الوظيفة: يمكنك تطبيق أنماط أزرار مختلفة على ShareLink لتتناسب مع تصميم تطبيقك.

ShareLink(item: URL(string: "https://example.com")!) {
    Label("مشاركة", systemImage: "square.and.arrow.up")
}
.buttonStyle(.borderedProminent)

7. استخدام ShareLink مع أنواع مخصصة (Custom Transferable)

الوظيفة: يمكنك جعل أنواع البيانات المخصصة الخاصة بك قابلة للمشاركة عن طريق جعلها تتوافق مع بروتوكول Transferable.

struct MyData: Transferable {
    static var transferRepresentation: some TransferRepresentation {
        CodableRepresentation(contentType: .plainText)
    }
    let text: String
}

let myData = MyData(text: "بيانات مخصصة")
ShareLink(item: myData) {
    Text("مشاركة بيانات مخصصة")
}

8. ShareLink مع معاينة متقدمة (Advanced Preview)

الوظيفة: يمكنك إنشاء معاينة غنية تحتوي على عنوان وصورة ووصف.

let preview = SharePreview("عنوان المعاينة", image: Image(systemName: "star.fill"), icon: Image(systemName: "heart.fill"))
ShareLink(item: "محتوى رائع", preview: preview) {
    Label("مشاركة مع معاينة", systemImage: "square.and.arrow.up")
}

أمثلة متقدمة

إليك مثال متكامل يوضح كيفية استخدام ShareLink في تطبيق لمشاركة الصور مع معاينة مخصصة:

import SwiftUI

struct PhotoShareView: View {
    let photo: UIImage
    let title: String
    
    var body: some View {
        ShareLink(
            item: Image(uiImage: photo),
            preview: SharePreview(title, image: Image(uiImage: photo))
        ) {
            Label("مشاركة الصورة", systemImage: "square.and.arrow.up")
        }
    }
}

الخلاصة

تعد ShareLink أداة قوية وسهلة الاستخدام في SwiftUI لمشاركة المحتوى. بفضل تكاملها العميق مع النظام، توفر تجربة مستخدم سلسة ومألوفة عبر جميع أجهزة Apple. سواء كنت تشارك نصًا بسيطًا أو محتوى وسائط متعددة معقدًا، فإن ShareLink تبسط العملية وتقلل من كمية الكود المطلوب بشكل كبير. ابدأ باستخدامها اليوم في مشاريعك SwiftUI لتحسين تجربة المشاركة في تطبيقاتك!

توصيات