الكائنات القابلة للمراقبة
جزء من قسم مقدمة إلى SwiftUI في رحلة Swift على Coddy. الدرس 40 من 50.
تُوضَع البيانات التي تشترك فيها عدة عروض، أو التي لها منطقها الخاص، في فئة. تتوافق مع ObservableObject، وتُوسَم كل خاصية تعرضها الشاشة بـ @Published:
class Cart: ObservableObject {
@Published var count = 0
func add() {
count += 1
}
}يخزّن العرض الذي ينشئ الكائن هذا الكائن باستخدام @StateObject. تحافظ SwiftUI على بقاء هذا الكائن الواحد ما دام العرض ظاهرًا على الشاشة، وتعيد رسم العرض كلما تغيّرت خاصية منشورة:
struct ContentView: View {
@StateObject private var cart = Cart()
var body: some View {
VStack {
Text("Items: \(cart.count)")
Button("Add to cart") {
cart.add()
}
}
}
}تضع طريقة العرض الفرعية التي تتلقى كائنًا موجودًا من العرض الأب العلامة @ObservedObject بدلًا من ذلك: فهي تراقب الكائن لكنها لا تملكه.
التحدي
متوسطالفئة Scoreboard غير متصلة بالشاشة. اجعلها ObservableObject مع @Published points، وخزّنها في ContentView باستخدام @StateObject، واجعل الزر يستدعي scoreboard.score(). يجب أن يعرض النص Points: 10 بعد نقرة واحدة.
جرّب بنفسك
import SwiftUI
@main
struct CoddyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس مقدمة إلى SwiftUI
تدرّب بنفسك: Playground لـ Swift