swift 显示不重复日期的天数

xzlaal3s  于 2023-01-08  发布在  Swift
关注(0)|答案(1)|浏览(130)

我在显示日期中的日时遇到问题。我有多个格式为“2022-12- 27 T04:00:31.980”的日期。我希望“选取器”能够选择月份中的日之后的日期。当我有相同的日期但不同的时间时,问题就出现了,因为“选取器”显示日的次数与它显示不同时间的次数一样多。
这是我的“挑选者”代码:

Picker(selection: $currentTab, label: Text("Wybierz dzień")) {
                    
                    let calendar = Calendar.current
                    ForEach(temperatureCall.chartDataEntries) { item in
                        let components = calendar.dateComponents([.day, .month, .year], from: item.lastupdated)
                        let day = components.day!
                        let month = components.month!
                        let year = components.year!
                        Text("\(String(day)).\(String(month)).\(String(year))")
                            .tag(String(day))
                    }
                }

我希望每一天都是独一无二的,能够选择一天,无论它是多少次重复与不同的时间。

let calendar = Calendar.current
let dates = Set(temperatureCall.chartDataEntries.map { calendar.startOfDay(for: $0.lastupdated) })

                Picker(selection: $currentTab, label: Text("Wybierz dzień")) {
                    ForEach(dates) { item in
                        let components = calendar.dateComponents([.day, .month, .year], from: item)
                        let day = components.day!
                        let month = components.month!
                        let year = components.year!

                        Text("\(String(day)).\(String(month)).\(String(year))")
                            .tag(String(day))
                    }
                }

我做了类似这样的事情,不幸的是,我得到了一个错误:第一个月

tcbh2hod

tcbh2hod1#

我将Map到一天的开始,并使用Set获取唯一值

Set(dates.map { calendar.startOfDay(for: $0)})

这可以作为temperatureCall中的计算属性来完成,然后您可以在ForEach中使用此属性

var uniqueDates: [Date] {
    Set(dates.map { calendar.startOfDay(for: $0) }).sorted()
}

相关问题