使用输入的字符串作为出现在 SwiftUI 的 TextField 中的默认文本

Posted

技术标签:

【中文标题】使用输入的字符串作为出现在 SwiftUI 的 TextField 中的默认文本【英文标题】:Using an inputted string as a default text appearing in SwiftUI's TextField 【发布时间】:2020-01-04 13:04:26 【问题描述】:

这是一个简单的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”;属性初始化器在“self”可用之前运行

我把self.放在oldNameoldLastName前面,又出现了一个,

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

此时我不知道该怎么办。我希望姓名和姓氏都显示在TextFields 中。

【问题讨论】:

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

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

【讨论】:

以上是关于使用输入的字符串作为出现在 SwiftUI 的 TextField 中的默认文本的主要内容,如果未能解决你的问题,请参考以下文章

在 SwiftUI 中使用状态变量作为函数的输入

SwiftUI+CoreData项目出现The operation couldn’t be completed(GenericObjCError error 0)错误的解决

UIPickerView 作为 SwiftUI 中 TextField() 的输入

SwiftUI TextField 数字输入

如何解决错误:我的代码中出现分段错误(核心转储)? AT&T 语法

SwiftUI 视图出现延迟