خاصية @Binding
جزء من قسم مقدمة إلى SwiftUI في رحلة Swift على Coddy. الدرس 39 من 50.
عندما تنمو الشاشة، تقسّمها إلى عروض أصغر. العرض الفرعي الذي يجب أن يغيّر حالة العرض الأب يعلن عن @Binding بدلاً من امتلاك القيمة:
struct VolumeControl: View {
@Binding var volume: Int
var body: some View {
Stepper("Volume: \(volume)", value: $volume, in: 0...10)
}
}يحتفظ العنصر الأب بـ @State ويمرّر ارتباطًا به باستخدام $:
struct ContentView: View {
@State private var volume = 5
var body: some View {
VStack {
VolumeControl(volume: $volume)
Text(volume == 0 ? "Muted" : "Playing")
}
}
}هناك قيمة واحدة تملكها ContentView. يغيّر عنصر الزيادة والنقصان في العنصر الفرعي هذه القيمة من خلال الربط، ويتبعها نص العنصر الأب. تملك @State قيمةً؛ بينما تستعير @Binding قيمةً من مكان آخر.
التحدي
متوسطيجب أن يبدّل ThemeToggle قيمة darkMode في المكوّن الأب. غيّر خاصيته إلى @Binding، واربط Toggle بها، ومرّر $darkMode من ContentView. يجب أن يعرض النص Dark theme عندما يكون المفتاح مفعّلًا.
جرّب بنفسك
import SwiftUI
@main
struct CoddyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس مقدمة إلى SwiftUI
تدرّب بنفسك: Playground لـ Swift