Представление не обновляется при использовании оболочки @State. Представление обновляется без использования оболочки @State, но должно делать это вручную.
import SwiftUI
struct SwiftUIView: View {
@ObservedObject var people: People
var body: some View {
VStack {
ForEach(people.peoples){ person in
HStack{
Text("\(person.age)")
if person.ismale {
Text("Male")
} else {
Text("Female")
}
Button(action:{ person.age += 1}){
Text("Age+1")
}
}
}
}
}
}
struct Person: Identifiable{
var id = UUID()
@State var age: Int
var ismale = true
}
class People: ObservableObject {
@Published var peoples: [Person]
init() {
self.peoples = [
Person(age: 10),
Person(age: 12, ismale: false)
]
}
}
struct SwiftUIView_Previews: PreviewProvider {
static var previews: some View {
SwiftUIView(people: People())
}
}
По какой-то причине при нажатии кнопки в представлении не происходит никаких изменений.
Если я изменю его на
Button(action:{ **self.people.peoples[0].age += 1** }){
Text("Age+1")
}
...
struct Person: Identifiable{
var id = UUID()
**var age: Int**
var ismale = true
}
Он обновится, но кнопка не будет динамической c. Однако, если я сделаю person.age += 1
внутри ForEach l oop без оболочки @State
для переменной age.
ОШИБКА: «Левая часть оператора мутации не изменяема: 'person' - это константа 'let'»
Я думал, что понимаю, что означает Struct, Class, @State .. . Думаю, нет ... Заранее благодарим за любые решения.