Middle+
iOS geliştirme bağlamında PreferenceKey nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
PreferenceKey SwiftUI'da, çocuk görünümlerden yukarıya doğru değerleri iletmeye olanak tanıyan bir protokoldür. Boyutlar, konumlar veya diğer özellikler hakkında bilgi toplamak için kullanılır ve bu bilgiler, düzen veya davranış kararları almak için ebeveyn görünümlerde kullanılabilir.
Ana bileşenler:
- Anahtar (Key):
PreferenceKeyprotokolünü uygulayan bir türdür. İletilecek değer türünü ve birden fazla değeri nasıl birleştireceğini (reduceyöntemi) belirler.struct MySizePreferenceKey: PreferenceKey { static var defaultValue: CGSize = .zero // Varsayılan değer static func reduce(value: inout CGSize, nextValue: () -> CGSize) { // Değerleri birleştirme mantığı. // Bu durumda, maksimum boyutu seçebilir veya toplayabiliriz. // Örnek: value = max(value, nextValue()) // Toplama örneği: value.width += nextValue().width; value.height += nextValue().height value = nextValue() // Sadece son değeri alıyoruz (örnek olarak) } } - Değeri ayarla: Çocuk görünüm,
.preference(key:value:)modifikatorü ile değeri ayarlar.Text("Merhaba") .background(GeometryReader { geometry in Color.clear.preference(key: MySizePreferenceKey.self, value: geometry.size) }) - Değeri oku: Ebeveyn görünüm, toplanan değeri
.onPreferenceChangemodifikatorü ile okur.VStack { // Tercihleri ayarlayan çocuk görünümler Text("Örnek 1") .background(GeometryReader { geometry in Color.clear.preference(key: MySizePreferenceKey.self, value: geometry.size) }) Text("Örnek 2 uzun") .background(GeometryReader { geometry in Color.clear.preference(key: MySizePreferenceKey.self, value: geometry.size) }) } .onPreferenceChange(MySizePreferenceKey.self) { size in // Burada toplanan boyut kullanılabilir print("Toplam boyut:", size) }
Ne zaman kullanılır:
- Çocuk öğelerin boyutlarını almak ve ebeveynin uyumlu düzenini sağlamak.
- Öğelerin konum bilgilerini iletmek.
- Özel çapa noktaları (anchors) oluşturmak.
- Birden fazla çocuk görünümden durum veya özellikleri toplamak.
Environment ile farkı:
Environment, verileri aşağı doğru iletir.PreferenceKey, verileri yukarı doğru iletir ve birden fazla çocuk öğeden değerleri toplama/ birleştirme imkanı sağlar.