ForEach 通过多个 TextField 来验证 SwiftUI 中是不是为空

Posted

技术标签:

【中文标题】ForEach 通过多个 TextField 来验证 SwiftUI 中是不是为空【英文标题】:ForEach through multiple TextField to verify if empty or not in SwiftUIForEach 通过多个 TextField 来验证 SwiftUI 中是否为空 【发布时间】:2020-01-31 02:29:06 【问题描述】:

我在弄清楚如何检查每个文本字段中的文本是否为空时遇到了一些麻烦。我在 VStack 中有 3 个文本字段部分,我只需要用户输入来自您在下面看到的 2/3 部分(我猜是变量)的用户输入。

如何检查用户输入文本的哪两个部分,并在文本字段留空的部分中获得最终结果?我已经将我所有的 TextField String 变量放入一个惰性变量中。

现在我知道我需要 forEach 来完成此操作,甚至 For In 会更受欢迎。

提前感谢您!

希望我解释得很好,并且可以看到这在未来对其他人来说是可行的,例如将 2/3 部分中留空的文本字段变灰。这只是一个例子,但很感激!

【问题讨论】:

到目前为止你有什么尝试? @fuzz 我已将所有文本字段放入一个数组中,然后“让 theArr = self.array.allSatisfy $0.isEmpty ”,但由于某种原因我不能使用它。我收到一个可变错误 【参考方案1】:

您可以根据以下内容进行更新:

 @State var array = [String](repeating: "", count: 3)
 @State var array1 = [String](repeating: "", count: 1)
 @State var array2 = [String](repeating: "", count: 3)
 @State  var var1 = true
 @State  var var2 = true
 @State  var var3 = true


  var body: some View
  VStack 
    HStack TextField("text0", text: $array[0])
            TextField("text0", text: $array[1])
            TextField("text0", text: $array[2])
    .onReceive(array.publisher)  _ in

        self.var1 = self.array.allSatisfy$0.isEmpty
        self.check()
      
    HStack
       TextField("text1", text: $array1[0])
    .onReceive(array1.publisher)  _ in

        self.var2 = self.array1.allSatisfy$0.isEmpty
        self.check()
      
    HStack
      TextField("text2", text: $array2[0])
      TextField("text2", text: $array2[1])
       TextField("text2", text: $array2[2])
    .onReceive(array2.publisher)  _ in

        self.var3 = self.array2.allSatisfy$0.isEmpty
        self.check()
      
   
  

 func check()

    switch ( (var1 ? 1 : 0) | (var2 ? 2: 0) | (var3 ? 4:0))
        case 0b001: print( "var1", var1)
        case 0b010: print( "var2", var2)
        case 0b100: print( "var3", var3)
        default: return
        
    

   

【讨论】:

这如何告诉我哪个字段是空的?我将有一个按钮来进行检查。我只希望用户填写 3 个部分中的任何 2 个部分,并在数学显示在用户根据前 2 个部分信息留空的字段上后得到结果。 有什么想法吗?我不太确定这个。我可能不得不做不同的事情 你可以添加一个check函数来找出哪个是空的。 我试图做一个 if 语句来检查所有提供的变量,但没有奏效。我觉得我想多了,这是我整个应用程序中最难的一个,也是最后一个。真的想把它顶起来。谢谢! 我确实为你加了一张支票

以上是关于ForEach 通过多个 TextField 来验证 SwiftUI 中是不是为空的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ForEach 中制作的 TextField 更新结构的属性

在 ForEach 循环中绑定时,如何阻止 SwiftUI TextField 失去焦点?

PhpSpreadsheet foreach 循环通过多个工作表

SwiftUI 上带有 TextField 的可删除表

SwiftUI 上带有 TextField 的可删除表

按下返回键时如何通过多个文本字段输入进行选项卡?