代码之家  ›  专栏  ›  技术社区  ›  Alexnnd

在SwiftUI中有两个日期的If语句

  •  0
  • Alexnnd  · 技术社区  · 3 年前

    只有当当前日期等于存储在我的CoreData属性上的日期时,我才愿意显示SwiftUI视图。

    我第一次尝试了下面的这条线,但似乎不可能:

    if (example.date!, format: .dateTime.day(.twoDigits)) == (Date(), format: .dateTime.day(.twoDigits)) {
    

    然后,我试着在网上找到了下面这行:

    if Calendar.current.isDate(example.date!, equalTo: Date(), toGranularity: .day) {
    

    但它并没有像预期的那样起作用。只有在日期都是的情况下才可以 04/02/2023 但如果日期是 2023年2月4日 05/02/2023

    你们有想法吗?谢谢

    1 回复  |  直到 3 年前
        1
  •  1
  •   vadian    3 年前

    添加一个助手函数作为的扩展 Date 它检查特定日期组件的值是否相等

    extension Date {
        func isValueOfComponent(_ component: Calendar.Component, equalTo date: Date) -> Bool {
            Calendar.current.component(component, from: self) == Calendar.current.component(component, from: date)
        }
    }
    

    然后比较

    if example.date!.isValueOfComponent(.day, equalTo: Date())
    

    能够考虑多个组件的更灵活的解决方案是

    extension Date {
        func isDateEqual(to date: Date, matching components: Set<Calendar.Component>) -> Bool {
            Calendar.current.dateComponents(components, from: self) == Calendar.current.dateComponents(components, from: date)
        }
    }
    

    并使用它

    if example.date!.isDateEqual(to: Date(), matching: [.month, .day])