Назад к вопросам
Junior — Middle
75
Объясните, что такое PreferenceKey и как оно используется в разработке интерфейсов?
Ответ от нейросети
sobes.tech AI
PreferenceKey — это протокол в SwiftUI, который позволяет передавать значения от дочерних вью к родительским, то есть вверх по иерархии вью.
Обычно данные в SwiftUI передаются сверху вниз через свойства, но иногда нужно, чтобы дочерняя вью сообщила родительской какую-то информацию (например, размер, позицию или состояние). Для этого используется PreferenceKey.
Пример использования:
- Создаётся тип, реализующий PreferenceKey, с определённым типом значения и методом объединения значений.
- В дочерней вью устанавливается значение через модификатор
.preference(key:value:). - В родительской вью можно получить это значение через
.onPreferenceChange.
Пример кода:
struct MyPreferenceKey: PreferenceKey {
static var defaultValue: CGFloat = 0
static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) {
value = max(value, nextValue())
}
}
struct ChildView: View {
var body: some View {
Text("Hello")
.background(GeometryReader { geo in
Color.clear.preference(key: MyPreferenceKey.self, value: geo.size.height)
})
}
}
struct ParentView: View {
@State private var height: CGFloat = 0
var body: some View {
ChildView()
.onPreferenceChange(MyPreferenceKey.self) { value in
self.height = value
}
}
}
Таким образом PreferenceKey помогает передавать данные снизу вверх в иерархии SwiftUI.