繁体   English   中英

如何更改 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 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM