gpt4 book ai didi

iOS:带有日期的数组中的 UICollectionView 部分

转载 作者:搜寻专家 更新时间:2023-11-01 07:05:16 33 4
gpt4 key购买 nike

我有一个 arrayPerson。 Person 对象在它们之间有许多字段 inscriptionDate(一个 timestamp)。我必须从这个 array 创建一个 collectionView 但使用 sections。每个部分都有一个标题为 inscriptionDate 作为格式为 dd/mm/yyyy 的日期。我必须按 inscriptionDatearray 进行排序,但没有时间(仅格式 dd/mm/yyyy),以便将数据加载到collectionView(考虑到这些部分)。我从另一个问题中发现了这个 solution .但是在执行此操作之前如何对 array 进行排序?我该如何使用它:

order = NSCalendar.currentCalendar().compareDate(now, toDate: olderDate, 
toUnitGranularity: .Day)

就我而言?

最佳答案

我同意@Vasilii Muravev,您需要先清理您的timestamp 对象,使用扩展或函数。顺便说一句,Timestamp 不是有效的 Swift 对象,除非它是您创建的自定义类。

然后你可以为你的数据源创建一个字典。我将使用@Vasilii Muravev 的扩展名:

//var myKeys : [Date] = []
let sortedPeople = persons.sorted { $0.inscriptionDate.noTime() < $1.inscriptionDate.noTime() }
//break your array into a dictionary([Date : [Person]])
//personsSortedByDateInSections : [Date : [Person]] = [:]
for person in sortedPeople {
if personsSortedByDateInSections[person.inscriptionDate] != nil {
personsSortedByDateInSections[person.inscriptionDate]!.append(person)
} else {
personsSortedByDateInSections[person.inscriptionDate] = [person]
}
}
myKeys = setKeyArray(personSortedByDateInSections.keys)

这将为您提供一个字典对象,其中包含按其 inscriptionDate 分组(分段)的所有 Person 对象。然后您只需要填写您的 collectionView 委托(delegate)和数据源方法。

override func numberOfSections(in: UICollectionView) -> Int {
return myKeys.count
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return personsSortedByDateInSections[myKeys[section]].count
}

更新:正如您的评论中所述,使用 swift 字典获取一组键存在问题(我认为 swift 字典在早期版本中没有这个问题?我可能是错的)......无论如何解决这个问题我已经使用此函数为“keyArray”设置类变量。:

fileprivate func setKeysArray(_ keys: LazyMapCollection<Dictionary<Date, [Person]>, String) -> [Date]{
var keysArray = [Date]()

for key in keys {
keysArray.append(key)
}
return keysArray
}

关于iOS:带有日期的数组中的 UICollectionView 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48464678/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com