我正在使用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因为它是一天后。我该如何解决这个问题?
答案 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)