ios - 使用输入的字符串作为出现在 SwiftUI 的 TextField 中的默认文本
问题描述
这是一个简单的struct
参与TextField
,效果很好。
struct NewProjectView: View {
@State var name = ""
@State var lastName = ""
var body: some View {
VStack{
TextField("Name: ", text: $name)
TextField("Last Name: ", text: $lastName)
}
}
}
现在,我已经修改了struct
接受两个参数,并试图使它们等于@State
变量。
struct NewProjectView: View {
var oldName: String
var oldLastName: String
@State var name = oldName // ERROR
@State var lastName = oldLastName // ERROR
var body: some View {
VStack{
TextField("Name: ", text: $name)
TextField("Last Name: ", text: $lastName)
}
}
}
struct NewProjectView_Previews: PreviewProvider {
static var previews: some View {
NewProjectView(oldName: "James", oldLastName: "Morton")
}
}
但是,错误显示如下
不能在属性初始化器中使用实例成员“oldName”;属性初始化程序在“自我”可用之前运行
I 放在andself.
前面,另一个出现,oldName
oldLastName
使用未解析的标识符“self”
在这一点上,我不知道该怎么做。我希望 name 和 last name 都显示在两个TextField
s 中。
解决方案
如果此视图旨在更改姓名和姓氏,那么您需要@Binding
,而不是@State
像
struct NewProjectView: View {
@Binding var name: String
@Binding var lastName: String
var body: some View {
VStack{
TextField("Name: ", text: $name)
TextField("Last Name: ", text: $lastName)
}
}
}
所以创建它你可以传入旧名和姓氏,比如从某个模型。
推荐阅读
- c# - 反序列化对象导致对象内部的空变量
- python - matplotlib 如何使用 facecolors='none' 为不同的类绘制不同的边缘颜色?
- algorithm - 如何计算插入排序的运行时间?
- javascript - 你如何有条件地重置 JavaScript 中的计数器
- javascript - multer 单次上传不起作用,但数组起作用
- angular - 如何为 Angular 项目编写 e2e 测试
- angular - Angular 组件模板继承
- firebase - 如何更改 Firebase 实时数据库位置?
- c# - 在 C# WPF 应用程序中使用 Firebase 身份验证
- angular - 如何在角度 SPA 路由中路由到容器应用程序