首页 > 解决方案 > 当列表中的值与 SwiftUI 中的先前值不同时,如何仅在列表中显示值

问题描述

我目前有一个列表,它在每行的核心数据中交替显示日期(//Climb 日期组)和详细信息(//Climb 详细信息行)。

我只想显示日期行,但如果它与上面的行不同。

List{
            ForEach(climbs, id: \.self){ thisClimb in
                let gradeText = (thisClimb as? Climb)?.grade
                let attemptsText = (thisClimb as? Climb)?.attempts
                let passfailText = (thisClimb as? Climb)?.passfail ?? "climb string err"
                let newclimbdateText = (thisClimb as? Climb)?.climbdate
                
                
                //Climb date group
                if(oldclimbdateText != newclimbdateText){
                    HStack{
                        Spacer()
                        Text(newclimbdateText!.addingTimeInterval(600), style: .date).fontWeight(.medium)
                        Spacer()
                    }
                }
                
                //Climb details row
                HStack{
                    Text(gradesV[Int(gradeText!)])
                    Spacer()
                    Text("\(attemptsText!) attempts")
                    Spacer()
                    Text(passfailText)
                }

            }.onDelete(perform: deleteClimb)
        }

上面的代码显示了这一点:

iPhone 截图

因此,为了不显示相同的日期(参见上面的多个 Oct-18),我试图做的是在调用的循环之外设置一个变量@State private var oldclimbdateText,然后在“//Climb date group”下的 if 语句中我试图设置`oldclimbdateText = newclimbdateText`。这样在他们匹配的下一个循环中不会进入 if 语句。

但是,当我尝试时,我得到了错误Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols

我这样做只是为了好玩。使用 Xcode 12 和 Swift5。

  1. 为什么我会收到此错误,并且 2) 是否有更好的方法来摆脱这些重复的日期行?

标签: iosswiftswiftuiswift5

解决方案


推荐阅读