如何在 SwiftUI 中更改 @State 值?

Posted

技术标签:

【中文标题】如何在 SwiftUI 中更改 @State 值?【英文标题】:How to change @State value in SwiftUI? 【发布时间】: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())
    

【问题讨论】:

【参考方案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

【讨论】:

以上是关于如何在 SwiftUI 中更改 @State 值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中使用 UIButton 更改 @State var

深度解析:为何在 SwiftUI 视图的 init 初始化器里无法更改 @State 的值?

深度解析:为何在 SwiftUI 视图的 init 初始化器里无法更改 @State 的值?

如何根据 SwiftUI 中的 @State 更改导航视图的导航视图样式?

如何在 SwiftUI 中延迟 @State 变量的设置值

SwiftUI:从子视图中关闭模式