По сути, я гнездюсь @Binding
3 слоя в глубину.
struct LayerOne: View {
@State private var doubleValue = 0.0
var body: some View {
LayerTwo(doubleValue: $doubleValue)
}
}
struct LayerTwo: View {
@Binding var doubleValue: Double {
didSet {
print(doubleValue)
}
}
var body: some View {
LayerThree(doubleValue: $doubleValue)
}
}
struct LayerThree: View {
@Binding var doubleValue: Double {
didSet {
print(doubleValue) // Only this print gets run when doubleValue is updated from this struct
}
}
var body: Some view {
// Button here changes doubleValue
}
}
Какую бы структуру я ни изменил doubleValue
в том, где находится didSet
будет запущен, так что, например, если я изменю его в LayerThree
только этот будет напечатан, ни один из остальных не будет.
Я могу следить за изменениями с помощью .onChange(of: doubleValue)
который затем будет запущен, когда он изменится, но для меня это не имеет смысла, почему didSet
не будет выполняться, кроме как в структуре, в которой она была изменена.
Является @Binding
конкретная структура?