Middle+
iOS inkişaf kontekstində PreferenceKey nədir?
sobes.tech Süni İntellekt
AI-dan cavab
PreferenceKey SwiftUI-də, uşaqların görünüşlərindən yuxarıya doğru dəyərləri ötürməyə imkan verən protokoldur. Bu, uşaqların ölçüləri, mövqeləri və ya digər xüsusiyyətləri haqqında məlumatların toplanması üçün istifadə olunur və bu məlumatlar valideyn görünüşlərində yerləşdirmə və ya davranış qərarları üçün istifadə edilə bilər.
Əsas komponentlər:
- Açar (Key):
PreferenceKeyprotokolunu tətbiq edən bir növ. Bu, ötürüləcək dəyər növünü və çoxlu dəyərlərin necə birləşdiriləcəyini (reducemetodu) müəyyən edir.struct MySizePreferenceKey: PreferenceKey { static var defaultValue: CGSize = .zero // Varsayılan dəyər static func reduce(value: inout CGSize, nextValue: () -> CGSize) { // Dəyərlərin birləşdirilməsi loqikası. // Bu halda, maksimum ölçü seçilə bilər və ya toplanar. // Nümunə: value = max(value, nextValue()) // Toplama nümunəsi: value.width += nextValue().width; value.height += nextValue().height value = nextValue() // Sadəcə son dəyəri götürürük (nümunə üçün) } } - Dəyəri təyin etmək: Uşaq görünüş
.preference(key:value:)modifikatoru ilə dəyəri təyin edir.Text("Salam") .background(GeometryReader { geometry in Color.clear.preference(key: MySizePreferenceKey.self, value: geometry.size) }) - Dəyəri oxumaq: Valideyn görünüş toplanmış dəyəri
.onPreferenceChangemodifikatoru ilə oxuyur.VStack { // Preferensiyaları təyin edən uşaqlar Text("Nümunə 1") .background(GeometryReader { geometry in Color.clear.preference(key: MySizePreferenceKey.self, value: geometry.size) }) Text("Nümunə 2 uzun") .background(GeometryReader { geometry in Color.clear.preference(key: MySizePreferenceKey.self, value: geometry.size) }) } .onPreferenceChange(MySizePreferenceKey.self) { size in // Burada toplanmış ölçüdən istifadə edə bilərsiniz print("Toplanmış ölçü:", size) }
Nə zaman istifadə etmək:
- Valideyn üçün uyğunlaşdırılmış yerləşdirmə üçün uşaqların ölçülərini almaq.
- Elementlərin yerləşmə məlumatlarını ötürmək.
- Özəl nişanlar (anchors) yaratmaq.
- Bir neçə uşağın vəziyyət və ya xüsusiyyətlərini toplamaq.
Environment ilə fərqi:
Environmentməlumatları aşağı doğru ötürür.PreferenceKeyməlumatları yuxarı doğru ötürür və çoxlu uşaqlardan dəyərləri toplamağa imkan verir.