[英]How to change @State value in SwiftUI?
我在 UserDefaults 中保存了一个用户数据,现在我想制作一个编辑配置文件视图,我想使用TextField
来显示当前用户数据,但我收到此错误,因为我将代码放在正文中Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.