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