Sobes.tech
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:

  1. Açar (Key): PreferenceKey protokolunu 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 (reduce metodu) 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)
        }
    }
    
  2. 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)
        })
    
  3. Dəyəri oxumaq: Valideyn görünüş toplanmış dəyəri .onPreferenceChange modifikatoru 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:

  • Environment məlumatları aşağı doğru ötürür.
  • PreferenceKey məlumatları yuxarı doğru ötürür və çoxlu uşaqlardan dəyərləri toplamağa imkan verir.