Swift - 在UITableView中显示按日期排序的部分的自定义对象数组

时间:2016-08-29 10:30:01

标签: ios uitableview sorting sections

我有一个充满自定义Event对象的数组。 每个事件都有一个NSDate对象。 现在我在一个大部分中显示每个事件。 但我想要的是所有事件都应按日期排序,每个日期都应有自己的节标题。

将所有对象分类到不同部分的最佳和最快方法是什么。

我考虑过创建一个带有子数组的主数组。每个子数组都是一个日期,因此我可以访问不同的部分,如let section = bigarray[0]

但这真的是执行此任务的最佳和最快的方法吗? 感谢。

1 个答案:

答案 0 :(得分:2)

首先,您可以创建Array<NSDate>来保存所有日期。然后创建一个Dictionary<NSDate, Array<Event>>,在此词典中,您可以将事件分组到相应的数组中。最后使用Array<NSDate>来获取部分,在部分中,您可以通过查询键获得相应的Array<Event>

class Event: NSObject {
  var date: NSDate?
}


var events: Array<Event> = Array()

for i in 1...100 {
  let event: Event = Event()
  event.date = NSDate.init(timeIntervalSinceNow: Double(i*86400/2))
  events.append(event)
}

var dates: Array<NSDate> = Array()

dates.append(events.first!.date!)

for event in events {
  var sameDay: Bool = false
  for date in dates {
    if NSCalendar.currentCalendar().isDate(date, inSameDayAsDate:event.date!) {
      sameDay = true
      break
    }
  }
  if !sameDay {
    dates.append(event.date!)
  }
}

var grouped: Dictionary<NSDate, Array<Event>> = Dictionary()

for date in dates {
  var dateEvents: Array<Event> = Array()
  for event in events {
    if NSCalendar.currentCalendar().isDate(event.date!, inSameDayAsDate: date) {
      dateEvents.append(event)
    }
  }
  grouped[date] = dateEvents
}