ماكرو @Observable
اجعل الفئة قابلة للمراقبة لكي تتتبعها الواجهات
ماكرو @Observable درس مجاني في SwiftUI Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SwiftUI Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SwiftUI Academy 4 دروس في المجموع.
بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.
The Problem to Solve
A plain model class holds data, but SwiftUI will not redraw when that data changes. We need to make the class observable.
Meet @Observable
The @Observable macro marks a class so SwiftUI watches its properties and refreshes any view that reads them. ✨
@Observable
class Counter {
var count = 0
}What a Macro Does
A macro generates extra code for you at compile time, so one short attribute adds all the change-tracking plumbing.
Importing Observation
The macro lives in the Observation framework, so add an import at the top of the file before you use it.
import Observation
@Observable
class Counter { var count = 0 }No Wrappers Needed
With @Observable you mark plain stored properties. No per-property wrapper is required for SwiftUI to track them.
@Observable
class Counter {
var count = 0
var name = "Taps"
}Reading Triggers Tracking
SwiftUI only refreshes for the properties a view actually reads in its body, so unused values cost you nothing.
Writing Triggers Updates
When you change a tracked property, every view that reads it is automatically scheduled to redraw.
model.count += 1 // views reading count refreshComputed Properties Work Too
A computed property built from tracked values also updates views, since reading it reads its inputs.
@Observable
class Counter {
var count = 0
var label: String { "Taps: \(count)" }
}Granular by Default
Tracking is granular: changing one property only refreshes views that read that property, not the whole screen.
Replacing ObservableObject
@Observable is the modern replacement for the older ObservableObject plus @Published pattern, with far less boilerplate.
Ignoring a Property
Mark a value with @ObservationIgnored when it should not trigger updates, like a cache or internal scratch value.
@Observable
class Counter {
@ObservationIgnored var cache = 0
}Quick Check
Time to check your grip on @Observable.
Recap
You made a model @Observable, so SwiftUI tracks the properties your views read and redraws them precisely when those values change. 🎉
الأسئلة الشائعة
هل درس «ماكرو @Observable» مجاني؟
نعم — نص درس «ماكرو @Observable» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SwiftUI Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SwiftUI Academy 4 دروس في المجموع.
ماذا ستتعلم في «ماكرو @Observable»؟
اجعل الفئة قابلة للمراقبة لكي تتتبعها الواجهات تتمرن على SwiftUI Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SwiftUI Academy؟
لا تُشترط خبرة سابقة. SwiftUI Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «ماكرو @Observable»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SwiftUI Academy هذا؟
نعم. كل درس في SwiftUI Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- من حالة الواجهة إلى فئة نموذج
- ماكرو @Observable
- @State للكائنات المملوكة
- مشاركة النماذج عبر @Environment