【问题标题】:SwiftUI, IF inside ForEach loop to display different textSwiftUI,IF 在 ForEach 循环内显示不同的文本
【发布时间】:2020-12-21 22:41:26
【问题描述】:

我很难在 SwiftUI 的 ForEach 循环中显示某些文本。

我有一个使用 ForEach 迭代的数组。问题是,我需要显示某些文本,以确定是否在日历中选择了特定日期。 例如:

ForEach(reminders) { reminder in 
    if(Calendar.current.isDate(reminder.beginDate, equalTo: selectedPassedDate) {
       HStack {
         Text("The Text for the specific day")
       } else {
         Text("The text for the unspecific day")
       }
    }
}

当数组有超过 2 个元素时,不匹配日期的文本会显示多次(因为它在 foreach 内)。这是有道理的,但我正试图找出一种方法,只显示一个“未指定日期”文本而不是多个。

我尝试添加一个简单的布尔值来显示其他文本,但如果没有按钮或其他东西,我无法更改它的状态。我需要完全以编程方式完成此操作。我也将 else 语句移到了循环之外,但次要文本再次显示在当前日期选择中。

我能做些什么来解决这个问题?如果我可以在符合 SwiftUI 视图的同时以编程方式设置布尔值,那么我可以解决这个问题,但我不确定如何。

【问题讨论】:

    标签: arrays swift foreach swiftui swiftui-foreach


    【解决方案1】:

    你可以试试这样的:

    class FirstTime: ObservableObject {
        var value = true
    }
    
    struct MyView: View {
        ...
        @State var firstTime = FirstTime()
    
        var body: some View {
        VStack {
            ForEach(reminders) { reminder in
                HStack {
                    if (Calendar.current.isDate(reminder.beginDate, equalTo: selectedPassedDate) {
                        Text("The Text for the specific day")
                    } else {
                        if firstTime.value {
                            showTextOnce()
                        }
                    }
                }
            }
        }
    }
    
    func showTextOnce() -> some View {
        firstTime.value = false
        return Text("The text for the unspecific day")
    } 
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 2022-06-22
      • 2013-03-01
      • 2020-05-15
      • 2020-10-18
      相关资源
      最近更新 更多