Middle+
Kas ir PreferenceKey iOS izstrādes kontekstā?
sobes.tech AI
Atbilde no AI
PreferenceKey ir protokols SwiftUI, kas ļauj pārsūtīt vērtības no bērnu skatiem uz augšu pa skatu hierarhiju. To izmanto, lai savāktu informāciju par izmēriem, pozīciju vai citām bērnu skatu īpašībām, kuras var izmantot vecāku skatos, pieņemot lēmumus par izkārtojumu vai uzvedību.
Galvenās sastāvdaļas:
- Atslēga (Key): Tips, kas īsteno
PreferenceKeyprotokolu. Nosaka pārsūtāmās vērtības tipu un veidu, kā apvienot vairākas vērtības (reducemetode).struct MySizePreferenceKey: PreferenceKey { static var defaultValue: CGSize = .zero // Noklusējuma vērtība static func reduce(value: inout CGSize, nextValue: () -> CGSize) { // Apvienošanas loģika // Šajā gadījumā var izvēlēties maksimālo izmēru vai summēt // Piemērs: value = max(value, nextValue()) // Piemērs summēšanai: value.width += nextValue().width; value.height += nextValue().height value = nextValue() // Vienkārši ņemam pēdējo vērtību (piemēram) } } - Vērtības iestatīšana: Bērnu skats iestata vērtību, izmantojot modifikatoru
.preference(key:value:).Text("Sveiki") .background(GeometryReader { geometry in Color.clear.preference(key: MySizePreferenceKey.self, value: geometry.size) }) - Vērtības lasīšana: Vecāku skats lasa savākto vērtību, izmantojot modifikatoru
.onPreferenceChange.VStack { // Bērnu skati, kas iestata preferences Text("Piemērs 1") .background(GeometryReader { geometry in Color.clear.preference(key: MySizePreferenceKey.self, value: geometry.size) }) Text("Garš piemērs") .background(GeometryReader { geometry in Color.clear.preference(key: MySizePreferenceKey.self, value: geometry.size) }) } .onPreferenceChange(MySizePreferenceKey.self) { size in // Šeit var izmantot apvienoto izmēru print("Apvienotais izmērs:", size) }
Kad lietot:
- Saņemt bērnu elementu izmērus vecāka adaptīvai izvietošanai.
- Pārsūtīt informāciju par elementu izvietojumu.
- Izveidot savas ankerus (anchors).
- Savākt stāvokli vai īpašības no vairākiem bērnu skatiem.
Atšķirība no Environment:
Environmentpārsūta datus lejup pa skatu hierarhiju.PreferenceKeypārsūta datus augšup pa hierarhiju un ļauj savākt/savienot vērtības no vairākiem bērnu elementiem.