我希望在TableView中按类别显示事件,其中每个TableViewCell都是一个类别,其事件可以在嵌入在TableViewCell中的CollectionView中找到。
这是我想要实现的样本初始化原型。
var events = [Events]()
var eventCategory = [EventCategory]()
var testEvent1 = Events(id: 1, event_name: "PrototypeEvent", event_category: "Party", event_date: "10/06/19", event_img_url: "null")
var testEvent2 = Events(id: 2, event_name: "PrototypeEvent2", event_category: "Music", event_date: "11/06/19", event_img_url: "null")
override func viewDidLoad() {
super.viewDidLoad()
var eventArray = [testEvent1]
var eventArray1 = [testEvent2]
var category1 = EventCategory(title: "Party", events: eventArray)
var category2 = EventCategory(title: "Music", events: eventArray1)
eventCategory.append(category1)
eventCategory.append(category2)
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return eventCategory.count
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 245
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "PopularCell", for: indexPath) as! PopularCell
let category = eventCategory[indexPath.row]
for event in category.events! {
print("Event Name:\(event.event_name)")
}
cell.eventCategory = category
return cell
}
答案 0 :(得分:1)
为event_category设置enum
:
enum EventCategory {
case music
case party
...
}
然后使用Dictionary
的分组初始化
let eventsDictionary = Dictionary(grouping: events) { (element) -> EventCategory in
return element.event_category
}
您将有一个像[EventCategory: [Events]]
这样的字典; tableView
indexPath.row
可以轻松显示每一行的类别
答案 1 :(得分:1)
您可以使用Dictionary的init根据类别对事件进行分组,即
init(grouping:by:)
创建一个新字典,其关键字是由键返回的分组。 给定的闭包,其值是包含以下内容的元素的数组 返回每个键。
var groupedEventsDict = Dictionary(grouping: events) { $0.event_category }
groupedEventsDict
的类型为[String:[Events]]
,其中key
是event_category
,value
是位于{{1 }}。
现在,由于array of Events
需要一个event_category
,因此需要从array
创建一个UITableViewDataSource
。
array
因此,您的groupedEventsDict
方法类似于:
var groupedEventsArr = Dictionary(grouping: events) { $0.event_category }.compactMap({( $0.key, $0.value )})