【问题标题】:Adding textfield input to array during forEach in SwiftUI在 SwiftUI 中的 forEach 期间将文本字段输入添加到数组
【发布时间】: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 这不起作用

标签: arrays swift swiftui


【解决方案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)
            }
        })
    }
}

【讨论】:

    猜你喜欢
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多