首页 > 解决方案 > 使用输入的字符串作为出现在 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.前面,另一个出现,oldNameoldLastName

使用未解析的标识符“self”

在这一点上,我不知道该怎么做。我希望 name 和 last name 都显示在两个TextFields 中。

标签: iosswiftuimobile-applicationxcode11swift5.1

解决方案


如果此视图旨在更改姓名和姓氏,那么您需要@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)
        }
    }
}

所以创建它你可以传入旧名和姓氏,比如从某个模型。


推荐阅读