Observation في Swift: دليل شامل مع أمثلة

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

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

ابدأ الدورة

Observation في Swift: دليل شامل مع أمثلة

1. ما هو Observation ولماذا تحتاجه؟

Observation هو إطار عمل جديد قدمته Apple في مؤتمر WWDC 2023، والذي يعيد تعريف آلية مراقبة البيانات في Swift بشكل كامل. لقد حل محل النموذج القديم القائم على @Published و ObservableObject من Combine، مقدماً نهجاً أكثر كفاءة، وأماناً في التعامل مع التعددية (thread-safe)، وأكثر سهولة في الفهم. يعتمد Observation على بروتوكول Observable والماكرو @Observable، مما يسمح بتتبع التغييرات على مستوى الخصائص الفردية بدلاً من الكائن بأكمله.

لماذا تحتاج إليه؟ في تطوير التطبيقات الحديثة لأنظمة iOS و macOS و watchOS و tvOS، يُعد SwiftUI الإطار الرئيسي لبناء واجهات المستخدم. لكي يعمل SwiftUI بكفاءة، يحتاج إلى آلية تخبره بالتغييرات في البيانات لإعادة رسم أجزاء الواجهة التي تغيرت فقط. النهج القديم مع ObservableObject كان يعيد رسم الـ View بالكامل عند تغيير أي خاصية، مما يؤدي إلى عمليات حسابية زائدة وانخفاض في الأداء. Observation يحل هذه المشكلة من خلال تتبع دقيق للتغييرات على مستوى الخصائص الفردية.

المزايا الرئيسية: Observation جزء من المكتبة القياسية لـ Swift (بدءاً من iOS 17 و macOS 14 و tvOS 17 و watchOS 10)، ولا يتطلب أي تبعيات إضافية، وهو آمن تماماً مع التعددية (يمكن إجراء التغييرات من أي thread ويتم تسليم الإشعارات على الـ main thread)، ومتكامل بشكل وثيق مع SwiftUI من خلال الماكرو @Bindable والمعدل الجديد .onChange(of:).

2. التثبيت

Observation هو إطار عمل مدمج من Apple. وهو جزء من المكتبة القياسية لـ Swift بدءاً من الإصدار Swift 5.9 و Xcode 15. لا يتطلب أي تثبيت إضافي عبر مديري الحزم (CocoaPods، Swift Package Manager، Carthage).

لبدء استخدام Observation، كل ما عليك فعله هو:

  1. تثبيت Xcode 15 أو أحدث.
  2. في إعدادات المشروع، تأكد من أن الحد الأدنى لإصدار النشر (Deployment Target) مضبوط على iOS 17 أو macOS 14 أو tvOS 17 أو watchOS 10.
  3. استيراد الإطار في الملف الذي تخطط لاستخدامه فيه: import Observation.

إذا كنت تستخدم SwiftUI، فلن تحتاج إلى استيراد Observation بشكل منفصل، فهو متاح تلقائياً عند استيراد SwiftUI.

3. البداية السريعة — مثال عملي بسيط

لنقم بإنشاء نموذج بيانات بسيط و View يعرضه.

import SwiftUI

// 1. إنشاء كلاس قابل للمراقبة
@Observable
class UserSettings {
    var username: String = "ضيف"
    var isLoggedIn: Bool = false
}

// 2. استخدامه في View
struct ContentView: View {
    // @State لإدارة دورة الحياة
    @State private var settings = UserSettings()

    var body: some View {
        VStack(spacing: 20) {
            Text("المستخدم: \(settings.username)")
                .font(.title)

            TextField("أدخل الاسم", text: $settings.username)
                .textFieldStyle(.roundedBorder)
                .padding()

            Toggle("تسجيل الدخول", isOn: $settings.isLoggedIn)
                .padding()

            if settings.isLoggedIn {
                Text("لقد سجلت الدخول باسم \(settings.username)")
                    .foregroundColor(.green)
            } else {
                Text("أنت غير مصرح لك")
                    .foregroundColor(.red)
            }
        }
        .padding()
    }
}

في هذا المثال، يقوم الماكرو @Observable تلقائياً بتحويل الكلاس UserSettings إلى

توصيات