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

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 天的元素吗? 将字符串日期映射到真实的Dates。这样可以更轻松地进行日期数学运算 @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.")
    

注意

这不会保留任何排序。由于使用字典,这无关紧要,但以防万一你不知道。

【讨论】:

以上是关于如何使用与日期键匹配的字典填充表格视图的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Pandas 数据框的常用键填充多个字典?

我应该如何访问有关用于使用RxSwift和MVVM填充表格视图的数组的数据

如何将列名与字典键匹配并向计数器添加值

如何使用 .plist 文件填充表格视图?

如何填充表格视图,而不是表格视图控制器?

表格视图和外部数据源