Middle+
Wat is een PreferenceKey in de context van iOS-ontwikkeling?
sobes.tech AI
Antwoord van AI
PreferenceKey is een protocol in SwiftUI dat het mogelijk maakt om waarden van kindweergaven naar boven in de hiërarchie van weergaven te sturen. Het wordt gebruikt om informatie te verzamelen over afmetingen, posities of andere kenmerken van kindweergaven, die in ouderweergaven kunnen worden gebruikt voor lay-out- of gedragsbeslissingen.
Belangrijkste componenten:
- Sleutel (Key): Een type dat het protocol
PreferenceKeyimplementeert. Bepaalt het type waarde dat wordt doorgegeven en hoe meerdere waarden worden samengevoegd (reducemethode).struct MySizePreferenceKey: PreferenceKey { static var defaultValue: CGSize = .zero // Standaardwaarde static func reduce(value: inout CGSize, nextValue: () -> CGSize) { // Logica voor het samenvoegen van waarden. // In dit geval kan de maximale grootte worden gekozen of worden opgeteld. // Voorbeeld: value = max(value, nextValue()) // Voorbeeld voor optellen: value.width += nextValue().width; value.height += nextValue().height value = nextValue() // Neem gewoon de laatste waarde (als voorbeeld) } } - Waarde instellen: De kindweergave stelt de waarde in met behulp van de modifier
.preference(key:value:).Text("Hallo") .background(GeometryReader { geometry in Color.clear.preference(key: MySizePreferenceKey.self, value: geometry.size) }) - Waarde lezen: De ouderweergave leest de verzamelde waarde met behulp van de modifier
.onPreferenceChange.VStack { // Kindweergaven die voorkeuren instellen Text("Voorbeeld 1") .background(GeometryReader { geometry in Color.clear.preference(key: MySizePreferenceKey.self, value: geometry.size) }) Text("Voorbeeld 2 lang") .background(GeometryReader { geometry in Color.clear.preference(key: MySizePreferenceKey.self, value: geometry.size) }) } .onPreferenceChange(MySizePreferenceKey.self) { size in // Hier kan de geaggregeerde grootte worden gebruikt print("Geaggregeerde grootte:", size) }
Wanneer gebruiken:
- Het verkrijgen van de afmetingen van kindelementen voor een adaptieve lay-out van de ouder.
- Het doorgeven van informatie over de positie van elementen.
- Het maken van aangepaste ankers.
- Het verzamelen van toestand of eigenschappen uit meerdere kindweergaven.
Verschil met Environment:
Environmentgeeft gegevens naar beneden door in de hiërarchie van weergaven.PreferenceKeygeeft gegevens naar boven door en maakt het verzamelen/ samenvoegen van waarden uit meerdere kindweergaven mogelijk.