使用state修饰符修饰一个结构体,修改结构体的属性时,view会进行刷新,而class不会
定义一个结构体User
struct User {
var firstname = "Bilbo"
var lastname = "Baggins"
}
创建一个视图
struct ContentView: View {
@State private var user = User()
var body: some View {
VStack{
Text("Your name is\(user.firstname) \(user.lastname)")
TextField("FirstName",text: $user.firstname)
TextField("LastName",text:$user.lastname)
ChildUser()
}
}
}
可以发现,view会进行刷新,当将struct修改成class时,view不在进行刷新,
User
是一个结构体,每次我们修改该结构体的一个属性时,Swift 实际上都是在创建该结构体的一个新实例。@State
能够发现这种变化,并自动重新加载我们的视图。现在我们有了一个类,这种行为不再发生:Swift 可以直接修改值,所以view不会刷新