如何在 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 的值?