在 SwiftUI 中的 forEach 期间将文本字段输入添加到数组

Posted

技术标签:

【中文标题】在 SwiftUI 中的 forEach 期间将文本字段输入添加到数组【英文标题】:Adding textfield input to array during forEach in SwiftUI 【发布时间】:2021-05-10 19:25:59 【问题描述】:

我是 Swift / SwiftUI 的新手,并尝试在 foreach 期间将文本字段值存储在数组中。但是我遇到了 Thread 1: Fatal error: Index out of range 消息。存储值应该发生在视图(视图模型)之外还是可以在视图内完成??

struct OrderView: View 
    
    @Binding var groupsize: Int
    
    @State var nameArray = [String]()
    
    var body: some View 
            
            VStack           
                
                ForEach(0 ..< groupsize)  index in
                    TextField("Insert name", text: $nameArray[index])
                
            
              
    

【问题讨论】:

为什么不用nameArray.count替换groupsize 这是因为我要存储的值的数量取决于来自上一个视图的groupsize 变量。 groupsize > nameArray.count 这是这里的问题 ForEach(0 ..&lt; groupsize - 1),但正如@George_E 提到的,这可能不是一个好的设计选择 @aheze 这不起作用 【参考方案1】:

听取 cmets 的所有好建议,您可以尝试以下方法:

struct OrderView: View 
    @Binding var groupsize: Int
    @State var nameArray = [String]()
    
    var body: some View 
        VStack 
            if nameArray.count > 0 
                ForEach(0 ..< groupsize)  index in
                    TextField("Insert name", text: $nameArray[index])
            
        .onAppear(perform: 
            if groupsize > 0 
                nameArray = [String](repeating: "", count: groupsize)
            
        )
    

【讨论】:

以上是关于在 SwiftUI 中的 forEach 期间将文本字段输入添加到数组的主要内容,如果未能解决你的问题,请参考以下文章

在 SwiftUI 中的 forEach 中获取索引和值

在 SwiftUI 中的 ForEach 中绑定

ForEach 中的 SwiftUI 索引超出范围

SwiftUI 中的两个 ForEach

为啥我不能访问这个数组 ForEach 循环中的数据? SwiftUI

SwiftUI:删除 ForEach 中的最后一行