Swift - 按日期排序

时间:2016-11-08 10:50:31

标签: ios swift sorting date

我正在使用NSSortDescriptor s按日期元素对Array进行排序。使用格式化程序将日期设置为String,格式化程序的格式为:“dd / MM / yy HH:mm”。此日期元素存储在字典中,这些字典都存储在数组中。我的代码的部分内容如下:

// Date Formatting
let currentTime = Date()
let timeFormatter = DateFormatter()
timeFormatter.locale = Locale.current
timeFormatter.dateFormat = "HH:mm dd/MM/yy"
let convertedTime:String! = timeFormatter.string(from: currentTime)

// Descriptor
let descriptorD: NSSortDescriptor = NSSortDescriptor(key: "Date", ascending: false)

// Dictionary
let newUserRecord = [
    "Name"  : enteredName!,
    "Score" : self.gameScore,
    "Date"   : convertedTime
] as [String : Any]

// Sorting 
newUserArray.sort(using: [descriptorD])

但是我的问题是日期只按时间(HH:mm)排序,而没有考虑(dd / MM / yy)部分。例如,如果我按日期排序并且日期为13/11/16 19/11/16,日期为09:12 18/11/16,则09:12日期将首先出现,即使它应该是13:12因为它是一天后。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

这是面向对象的Swift方式:

声明结构而不是字典并包含时间格式器

struct User {

   let timeFormatter : DateFormatter = {
      let formatter = DateFormatter()
      formatter.locale = Locale.current
      formatter.dateFormat = "HH:mm dd/MM/yy"
      return formatter
   }()

   let name : String
   let score : Int
   let time : Date

   var convertedTime : String {
      return timeFormatter.string(from: time)
   }

}

声明User类型的数组并添加两个实例

var newUserArray = [User]()

newUserArray.append(User(name: "Foo", score: 12, time: Date().addingTimeInterval(1000.0)))
newUserArray.append(User(name: "Bar", score: 78, time: Date()))

按降序时间排序数组

newUserArray.sort(by: {$0.time > $1.time })

并打印格式化日期

print(newUserArray[0].convertedTime)