如何查询我的数据并将其按类别存储在数组中,以便在TableView中按类别显示它们?

时间:2019-06-14 08:51:33

标签: ios swift

我希望在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
    }

2 个答案:

答案 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]],其中keyevent_categoryvalue是位于{{1 }}。

现在,由于array of Events需要一个event_category,因此需要从array创建一个UITableViewDataSource

array

因此,您的groupedEventsDict方法类似于:

var groupedEventsArr = Dictionary(grouping: events) { $0.event_category }.compactMap({( $0.key, $0.value )})