ios - 当列表中的值与 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)
}
上面的代码显示了这一点:
因此,为了不显示相同的日期(参见上面的多个 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。
- 为什么我会收到此错误,并且 2) 是否有更好的方法来摆脱这些重复的日期行?
解决方案
推荐阅读
- php - 如果页面是 Wordpress 中的 front-page.php,则删除 footer.php 文件中的类
- haskell - 使用 Hackage 库
- java - 在 Java 中迭代映射时访问和修改下一个条目集
- javascript - 如何将 Codepen 转换为 Vue.js?
- firebase - Flutter:无法显示来自图像 url firestore 的图像
- python - AttributeError:“NoneType”对象没有属性“_meta”
- node.js - windows nodejs child_process exec echo 总是打印 childProcess 实例
- selenium-webdriver - 在运行 Selenium 测试的情况下,铬与铬浏览器
- video - QtQuick 中的 MediaPlayer 播放每帧存储在内存中的视频
- postgresql - 找不到 PostgreSQL 安装