PreferenceKeyPreferenceKey — это протокол SwiftUI, который обеспечивает восходящую коммуникацию от дочерних представлений к родительским — противоположное направление по сравнению с @Environment, который работает вниз.
Чтобы использовать PreferenceKey, нужно определить соответствующий тип с двумя требованиями:
defaultValue — начальное значение до того, как любой дочерний элемент его установитreduce функция — определяет, как несколько значений от дочерних элементов объединяются в одноstruct MyKey: PreferenceKey {
static var defaultValue: CGFloat = 0
static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) {
value = nextValue()
}
}
.preference(key:value:).onPreferenceChange(_:perform:)// Child
Color.clear.preference(key: MyKey.self, value: geometry.size.height)
// Parent
.onPreferenceChange(MyKey.self) { height in
self.childHeight = height
}
GeometryReader внутри дочернего элемента и передача их наверхPreferenceKey — это стандартный механизм SwiftUI для передачи данных от дочернего элемента к родительскому; чаще всего используется, когда родитель должен реагировать на изменения лейаута или контента, происходящие в его дочерних элементах.
Функция reduce в реализации PreferenceKey определяет, как несколько значений, переданных дочерними представлениями, объединяются в одно агрегированное значение, которое получает родительское представление.
Новый — ещё не проверен сообществом
Вы