Swift中判断CoreData日期与当前日期日相等以控制SwiftUI视图显示问题
解决SwiftUI中仅显示日数相同的视图问题
首先要明确:你需要的是两个日期的日数字相等(比如1号和1号,无论月份、年份),而非判断两个日期为同一天。之前使用isDate(_:equalTo:toGranularity:)的方式是校验完整的年月日是否一致,自然不符合你的需求。
正确的做法是分别提取两个日期的day组件再做比较:
// 安全解包CoreData的date属性,避免强制解包引发崩溃 if let storedDate = example.date { let storedDay = Calendar.current.component(.day, from: storedDate) let currentDay = Calendar.current.component(.day, from: Date()) if storedDay == currentDay { // 此处放置需要显示的SwiftUI视图 Text("日数相同,显示此视图") } }
关于之前代码不符合预期的原因
你提到的04/02/2023和05/02/2023,若按DD/MM/YYYY格式解析,二者的日部分分别是4和5,本身就不相等,视图不显示是符合逻辑的。但如果你的实际场景是类似02/04/2023(4月2日)和02/05/2023(5月2日)这类日数字相同但月份不同的情况,之前的isDate方法会因月份不一致判断为不相等,导致视图不显示——这就是你觉得不符合预期的核心原因。
另外,建议不要强制解包example.date!,CoreData的日期属性若为可选类型,优先用if let或guard let做安全解包,避免运行时崩溃。
内容的提问来源于stack exchange,提问作者Alexnnd
相关产品推荐
相关产品推荐

