如何更改 SwiftUI 中的@State 值?
How to change @State value in SwiftUI?
我在 UserDefaults 中保存了一个用户数据,现在我想编辑个人资料视图,我想使用 TextField
来显示当前用户数据,但是我得到这个错误,因为我把代码放在里面正文 Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols
。我想在 TextField
中显示所有当前用户数据,以便他们可以在进行编辑之前查看他们的数据。如何正确地做到这一点?
我的代码
struct EditProfile: View {
@AppStorage(CurrentUserDefaults.EMAIL) var currentUserEmail: String?
@AppStorage(CurrentUserDefaults.USERNAME) var currentUserName: String?
@State var userName = ""
@State var userPhone = ""
@State var userAddress = ""
var body: some View {
username = currentUserName ?? "" //[Error] I want to display currentUserName on the textfield
NavigationView{
VStack{
TextField("Username", text: $userName)
}.navigationBarTitle("Edit Profile")
}.navigationViewStyle(StackNavigationViewStyle())
}
}
如果您希望将 userName
设置为 @AppStorage
值,然后更改临时 @State 变量(可能稍后提交),您可以使用 onAppear
设置它:
NavigationView{
VStack{
TextField("Username", text: $userName)
}
.navigationBarTitle("Edit Profile")
}
.navigationViewStyle(StackNavigationViewStyle())
.onAppear {
userName = currentUserName ?? ""
}
您不能像在 View
的主体中尝试执行的变量赋值那样执行内联代码,因为它是一种特殊类型的计算 属性(或函数),称为ViewBuilder
自动返回内容的地方:https://developer.apple.com/documentation/swiftui/viewbuilder
我在 UserDefaults 中保存了一个用户数据,现在我想编辑个人资料视图,我想使用 TextField
来显示当前用户数据,但是我得到这个错误,因为我把代码放在里面正文 Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols
。我想在 TextField
中显示所有当前用户数据,以便他们可以在进行编辑之前查看他们的数据。如何正确地做到这一点?
我的代码
struct EditProfile: View {
@AppStorage(CurrentUserDefaults.EMAIL) var currentUserEmail: String?
@AppStorage(CurrentUserDefaults.USERNAME) var currentUserName: String?
@State var userName = ""
@State var userPhone = ""
@State var userAddress = ""
var body: some View {
username = currentUserName ?? "" //[Error] I want to display currentUserName on the textfield
NavigationView{
VStack{
TextField("Username", text: $userName)
}.navigationBarTitle("Edit Profile")
}.navigationViewStyle(StackNavigationViewStyle())
}
}
如果您希望将 userName
设置为 @AppStorage
值,然后更改临时 @State 变量(可能稍后提交),您可以使用 onAppear
设置它:
NavigationView{
VStack{
TextField("Username", text: $userName)
}
.navigationBarTitle("Edit Profile")
}
.navigationViewStyle(StackNavigationViewStyle())
.onAppear {
userName = currentUserName ?? ""
}
您不能像在 View
的主体中尝试执行的变量赋值那样执行内联代码,因为它是一种特殊类型的计算 属性(或函数),称为ViewBuilder
自动返回内容的地方:https://developer.apple.com/documentation/swiftui/viewbuilder