在Swift中通过Date属性轻松地对对象进行分组
我最近创建了一些按月划分的表视图。 这就是我按照对象的date属性对它们进行分组的方式。
我们将使用Doctor Who剧集演示该功能。
这是一种按日期对事件进行分组的方法:
我们使用reduce(into:)
将我们的情节数组转换为以日期为键的情节字典。 在此示例中,当月播放的剧集将被分组在一起。 对于每个情节,我们从播出日期的年和月部分创建日期。 我们将当前情节追加到现有数组或空数组中,并将其设置为该日期键处的字典值。
不好意思的解释是抱歉,这篇文章更多地是关于算法的发展,而不是算法的细节。 😅
我们可以将此代码提取到一个函数中:
现在将这些情节归类如下:
让分组= groupedEpisodesByMonth(episodes)
我们可以采取几个步骤,使该方法可用于带有日期的任何模型对象。
首先,我们将创建一个带Dated
协议。 然后,我们的函数将接受实现我们协议的任何内容,而不是接受Episode
。
基本上,我们只是将Episode
类型替换为Dated
。 现在,我们的呼叫站点如下所示:
让分组= groupedByMonth(episodes)
差别不大,但现在我们可以使用date属性对任何内容进行分组。
我采取了一些额外的步骤来使它看起来更“快捷”。我没有将其保留为函数,而是在Array
上创建了扩展名,并参数化了将要分组的日期组件(因此您可以按天分组,或年份等)。
让分组=情节.groupedBy([。year,.month])
通过用常见情况的枚举来表示日期部分,我们可以使使用起来更加容易。
让分组=情节.groupedBy(.month)
但是我认为我所拥有的足以满足我的需求。 ☺️
将我们的数据按这种方式分组后,将其以表格视图的形式呈现相对来说比较简单,但是我会再保留一天。
谢谢阅读。 🤲