如何使用与日期键匹配的字典填充表格视图
Posted
技术标签:
【中文标题】如何使用与日期键匹配的字典填充表格视图【英文标题】:How to populate tableview with dictionary that matches the key for date 【发布时间】:2020-04-07 17:34:51 【问题描述】:我知道标题令人困惑,但我有一本字典,其中包含日期(字符串)键和事件文本作为值。
如何首先确定哪些键与未来 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"
]
【问题讨论】:
您要过滤数据集并仅获取未来 30 天的元素吗? 将字符串日期映射到真实的Date
s。这样可以更轻松地进行日期数学运算
@DilanAnuruddha 是的。然后,当我执行 cellforrowat 时,我可以仅使用第二个字典进行填充,该字典仅包含接下来 30 天的元素。如果这样做正确吗?
@MichaelScott 你能在问题中添加字典吗
直到现在我才有机会尝试您的代码。
【参考方案1】:
您可以使用日历获取当前日期,以便从当前日期获取当前月份和日期。
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.")
注意
这不会保留任何排序。由于使用字典,这无关紧要,但以防万一你不知道。
【讨论】:
以上是关于如何使用与日期键匹配的字典填充表格视图的主要内容,如果未能解决你的问题,请参考以下文章