Как с помощью SwiftUI сделать представление обернутым обновлением свойства State
Приведенный ниже код создает простой HStack
это в итоге выглядит так:
Проблема в том, что нажатие "increment" увеличивает "Count", но не "Nested". Кто-нибудь знает, почему это так и, возможно, как это исправить? Или представления SwiftUI просто фундаментально ломаются, когда они вложены вState
переменная?
struct ContentView: View {
var body: some View {
VStack {
Text("Count: \(count)")
nested
Button(action: {
self.count += 1
self.nested.count += 1
}) { Text("Increment") }
}
}
@State var count = 0
struct Nested: View {
var body: some View {
Text("Nested: \(count)")
}
@State var count = 0
}
@State var nested = Nested()
}
1 ответ
SwiftUI был разработан для "вложения" представлений, но вы используете его не по назначению. Переменные состояния предназначены для данных, принадлежащих представлению, а вложенное представление (или, по крайней мере, обычно) не предназначено для данных, принадлежащих представлению, поэтому оно не обязательно должно быть переменной состояния.
Вместо этого вы можете просто count
переменная как параметр для Nested
просмотр, и в любое время count
переменная состояния в родительском элементе изменится, ее тело будет перерисовано:
struct ContentView: View {
var body: some View {
VStack {
Text("Count: \(count)")
Nested(count: count) // pass the count as an init param
Button(action: {
self.count += 1
self.nested.count += 1
}) { Text("Increment") }
}
}
@State var count = 0
struct Nested: View {
var body: some View {
Text("Nested: \(count)")
}
var count: Int
}
}