【问题标题】:How to change @State value in SwiftUI?如何在 SwiftUI 中更改 @State 值?
【发布时间】:2021-04-21 05:01:15
【问题描述】:

我在 UserDefaults 中保存了一个用户数据,现在我想制作一个编辑配置文件视图,并且我想使用 TextField 来显示当前用户数据,但是我收到了这个错误,因为我将代码放在了正文 @987654322 @。我想在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())
    }
}

【问题讨论】:

    标签: ios swift xcode swiftui xcode12


    【解决方案1】:

    如果您希望将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

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 2020-10-21
      相关资源
      最近更新 更多