如何使用与日期关键字匹配的字典填充表视图



我知道标题很令人困惑,但我有一个以日期(字符串(键和事件文本为值的字典。

如何首先确定哪些键与接下来30天的日期匹配,然后用这30天内的任何键/值对填充我的表视图?

var calendarDataSource = [
"08/12": "SomeData",
"08/13": "SomeData",
"08/14": "SomeData",
"08/15": "SomeData",
"08/16": "SomeData",
"08/17": "SomeData",
"08/18": "SomeData",
"08/19": "SomeData",
"08/20": "SomeData",
"08/21": "SomeData",
"08/22": "SomeData",
"08/23": "SomeData",
"08/24": "SomeData",
"08/25": "SomeData"
]

您可以使用日历从当前日期中获取当前日期。

let date = Date()
let calendar = Calendar.current
var month = 0
var day = 0

一旦你有了,我就创建了一个[String]()来保存所有与你的字典匹配的KEYS。然后,我创建了一个循环来计算第1-30天,并将每个日期添加到该数组中,供您在字典中参考。使用.date(byAdding:...)非常重要,这样您就可以计算可能有28天、30天或31天的月份。

var datesToPull = [String]()
for futureDay in 1...30{
let toDate = Calendar.current.date(byAdding: .day, value: futureDay, to: date)
month = calendar.component(.month, from: toDate!)
day = calendar.component(.day, from: toDate!)
// We have to format the days to a XX/XX value to handle your key requirements. 
datesToPull.append("(String(format: "%02d", month))/(String(format: "%02d", day))")
}

如果你想计算今天,只需将循环更改为这个

for futureDay in 0...30{...

最后,要使用这些键,请将其放置在tableView(_ cellForRowAt:...)方法中,或者放置在适合您需要的任何位置。

for key in calendarDataSource.keys{
if datesToPull.contains(key){
print("Date Found.")
}
else{
print("No date found.")
}
}

备注

这不会保留任何排序。这应该不重要,因为使用字典,但以防万一你不知道

最新更新