SwiftUI,IF 在 ForEach 循环内显示不同的文本
Posted
技术标签:
【中文标题】SwiftUI,IF 在 ForEach 循环内显示不同的文本【英文标题】:SwiftUI, IF inside ForEach loop to display different text 【发布时间】: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 视图的同时以编程方式设置布尔值,那么我可以解决这个问题,但我不确定如何。
【问题讨论】:
【参考方案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")
【讨论】:
以上是关于SwiftUI,IF 在 ForEach 循环内显示不同的文本的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SwiftUI 在 Xcode 中消除 foreach 循环的歧义