Middle+
Τι είναι το PreferenceKey στο πλαίσιο της ανάπτυξης iOS;
sobes.tech AI
Απάντηση από AI
Το PreferenceKey είναι ένα πρωτόκολλο στο SwiftUI που επιτρέπει τη μετάδοση τιμών από τις παιδικές προβολές προς τα πάνω στην ιεραρχία των προβολών. Χρησιμοποιείται για τη συλλογή πληροφοριών σχετικά με μεγέθη, θέσεις ή άλλα χαρακτηριστικά των παιδικών προβολών, τα οποία μπορούν να χρησιμοποιηθούν σε γονικές προβολές για αποφάσεις σχετικά με τη διάταξη ή τη συμπεριφορά.
Βασικά στοιχεία:
- Κλειδί (Key): Ένας τύπος που υλοποιεί το πρωτόκολλο
PreferenceKey. Ορίζει τον τύπο της τιμής που θα μεταδοθεί και πώς θα συγχωνεύονται πολλαπλές τιμές (reduceμέθοδος).struct MySizePreferenceKey: PreferenceKey { static var defaultValue: CGSize = .zero // Προεπιλεγμένη τιμή static func reduce(value: inout CGSize, nextValue: () -> CGSize) { // Λογική συγχώνευσης τιμών. // Σε αυτήν την περίπτωση, μπορεί να επιλεγεί το μέγιστο μέγεθος ή να προστεθούν. // Παράδειγμα: value = max(value, nextValue()) // Παράδειγμα για πρόσθεση: value.width += nextValue().width; value.height += nextValue().height value = nextValue() // Απλώς παίρνουμε την τελευταία τιμή (για παράδειγμα) } } - Ορισμός τιμής: Η παιδική προβολή ορίζει την τιμή χρησιμοποιώντας τον τροποποιητή
.preference(key:value:).Text("Γειά") .background(GeometryReader { geometry in Color.clear.preference(key: MySizePreferenceKey.self, value: geometry.size) }) - Ανάγνωση τιμής: Η γονική προβολή διαβάζει την συλλεγμένη τιμή χρησιμοποιώντας τον τροποποιητή
.onPreferenceChange.VStack { // Παιδικές προβολές που ορίζουν προτιμήσεις Text("Παράδειγμα 1") .background(GeometryReader { geometry in Color.clear.preference(key: MySizePreferenceKey.self, value: geometry.size) }) Text("Παράδειγμα 2 μακρύ") .background(GeometryReader { geometry in Color.clear.preference(key: MySizePreferenceKey.self, value: geometry.size) }) } .onPreferenceChange(MySizePreferenceKey.self) { size in // Εδώ μπορείτε να χρησιμοποιήσετε το συγχωνευμένο μέγεθος print("Συγχωνευμένο μέγεθος:", size) }
Πότε να το χρησιμοποιήσετε:
- Απόκτηση διαστάσεων παιδικών στοιχείων για προσαρμοστική διάταξη του γονέα.
- Μεταφορά πληροφοριών σχετικά με τη θέση των στοιχείων.
- Δημιουργία προσαρμοσμένων δεικτών (anchors).
- Συλλογή κατάστασης ή ιδιοτήτων από πολλαπλές παιδικές προβολές.
Διαφορά από το Environment:
- Το
Environmentμεταδίδει δεδομένα κάτω στην ιεραρχία των προβολών. - Το
PreferenceKeyμεταδίδει δεδομένα πάνω και επιτρέπει τη συλλογή/ένωση τιμών από πολλαπλά παιδικά στοιχεία.