Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift-按发行日期排序_Ios_Swift_Sorting_Date - Fatal编程技术网

Ios Swift-按发行日期排序

Ios Swift-按发行日期排序,ios,swift,sorting,date,Ios,Swift,Sorting,Date,我正在使用NSSortDescriptors按日期元素对数组进行排序。使用格式为“dd/MM/yy HH:MM”的格式化程序将日期设置为String。此日期元素存储在字典中,所有字典都存储在数组中。我的部分代码如下所示: // Date Formatting let currentTime = Date() let timeFormatter = DateFormatter() timeFormatter.locale = Locale.current timeFormatter.dateFor

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

// 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:12 19/11/16,日期为09:12 18/11/16,则09:12日期将首先显示,即使它应该是13:12,因为它是一天后的日期。如何解决此问题?

这是面向对象的快捷方式:

声明结构而不是字典,并包含时间格式化程序

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)

只需使用
日历
并比较
排序中的日期
closure为什么要将其更改为字符串?如果要存储日期信息,请将其存储为日期对象。您还可以获得额外的好处,Date知道如何自行排序,它将解决您的问题,@fpg1503
sort
闭包中的日期是字符串。不是日期。您将无法将
sortDescriptor
DateFormatter
一起使用。类似的东西应该可以做到:
yourArray.sort({timeFormatter(dateFromString:$0.Date)>timeFormatter(dateFromString:$1.Date)})
或者类似的东西。Ok将尝试@LarmeI将添加类似的内容。我个人认为日期格式化程序不应该属于数据对象。它是一个视图对象,可能应该在视图控制器或类似的地方。不过,使用结构比使用字典要好得多。