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

Swift - Display array of custom objects with sections sorted by date in UITableView

我有一个充满自定义事件 object 的数组。 每个事件都有一个 NSDate object。 现在我在一个大的部分中显示每个事件。 但我想要的是所有事件都应该按日期排序,每个日期都应该有自己的部分 header.

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

我想用 sub-arrays 创建一个主数组。每个 sub-array 都是一个日期,这样我就可以像这样 let section = bigarray[0].

访问不同的部分

但这真的是完成这项任务的最好最快的方法吗? 谢谢

首先您可以创建一个 Array<NSDate> 来保存所有日期。然后创建一个 Dictionary<NSDate, Array<Event>>,在此字典中,您可以将事件分组到相应的数组中。最后使用Array<NSDate>获取sections,在section中通过查询key可以得到对应的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
}