在Swift中通过Date属性轻松地对对象进行分组

我最近创建了一些按月划分的表视图。 这就是我按照对象的date属性对它们进行分组的方式。

我们将使用Doctor Who剧集演示该功能。

这是一种按日期对事件进行分组的方法:

我们使用reduce(into:)将我们的情节数组转换为以日期为键的情节字典。 在此示例中,当月播放的剧集将被分组在一起。 对于每个情节,我们从播出日期的年和月部分创建日期。 我们将当前情节追加到现有数组或空数组中,并将其设置为该日期键处的字典值。

不好意思的解释是抱歉,这篇文章更多地是关于算法的发展,而不是算法的细节。 😅

我们可以将此代码提取到一个函数中:

现在将这些情节归类如下:

 让分组= groupedEpisodesByMonth(episodes) 

我们可以采取几个步骤,使该方法可用于带有日期的任何模型对象。

首先,我们将创建一个带Dated协议。 然后,我们的函数将接受实现我们协议的任何内容,而不是接受Episode

基本上,我们只是将Episode类型替换为Dated 。 现在,我们的呼叫站点如下所示:

 让分组= groupedByMonth(episodes) 

差别不大,但现在我们可以使用date属性对任何内容进行分组。

我采取了一些额外的步骤来使它看起来更“快捷”。我没有将其保留为函数,而是在Array上创建了扩展名,并参数化了将要分组的日期组件(因此您可以按天分组,或年份等)。

 让分组=情节.groupedBy([。year,.month]) 

通过用常见情况的枚举来表示日期部分,我们可以使使用起来更加容易。

 让分组=情节.groupedBy(.month) 

但是我认为我所拥有的足以满足我的需求。 ☺️

将我们的数据按这种方式分组后,将其以表格视图的形式呈现相对来说比较简单,但是我会再保留一天。

谢谢阅读。 🤲