Модификаторы становятся родителями для вью, к которой применяются (часть 1)Возвращаемся к опросу.
Понимание этой темы будет полезно позже, при более подробном рассмотрении View Tree и Attribute Graph.
Все что будет написано ниже - мои личные рассуждения. Т.к. со SwiftUI я не слишком знаком, некоторые утверждения могут быть спорны.Начнем...
"Модификаторы становятся родителями для вью, к которой применяются" - скорее всего утверждение верное, потому что большинство модификаторов являются ViewBuilder'ами.
Могут быть исключения, поэтому сказать, что данное выражение подходит для ВСЕХ модификаторов, наверное нельзя.Применение модификаторов схоже с потоком(stream) в реактивном программировании. На каждом шаге происходят различные преобразования с исходными данными.
Если не работали с реактивщиной, рассмотрим более простой и жизненный пример. Функции высшего порядка.
let array = [1, 2, 3, 4, 5]
array.map { $0 * 2 }
.filter { $0.isMultiple(of: 2) }
.reduce(0, +)
На каждом шаге мы оборачиваем данные в определенную оболочку.
reduce содержит в себе сумму исходных данных, умноженных на 2 и отфильтрованных по четности. То есть является родительской для filter, map и исходных данных.
Применяя модификаторы к вьюхам, происходит похожая история.
struct ContentView: View {
var body: some View {
Text("cmd + B, cmd + R")
.background(.red)
.frame(width: 200, height: 200)
}
}
На экране мы увидим красный background только для текста. Вьюха размером 200х200 останется прозрачной. Так происходит, потому что изначально мы обернули текст во вьюху с красным фоном, а потом эту вьюху(с текстом и фоном) обернули во вьюху размером 200х200.
То есть вьюха размером 200х200 является родительской для вьюхи с красным фоном и текстом.
Конец первой части 🙂