我在for
循环中创建对象,需要特定的创建日期和时间,以便我可以告诉他们创建的顺序。我还需要将此dateTime
保存为{{ 1}}并且仍然能够从中获得创作顺序
这可能吗?
我理解如何获取创建对象的日期和时间,但在转换为字符串时它不够具体。
目前我只有一个小日期扩展名:
String
但这显然不够准确,而且我认为在这段时间内增加几毫秒也不会有多大帮助?
我理解通过向对象添加计数等可以解决这个问题,以便我可以使用它来获取订单,但我知道如果我在将其转换为字符串之前使用Date它会正确地命令它,所以有隐藏在那里的一些信息我也需要转换为字符串。
答案 0 :(得分:1)
您可以将对象编写为:
struct SomeData: CustomStringConvertible {
let dateTimeStr: String
private static var dateFormatter: DateFormatter {
let formatter = DateFormatter()
formatter.dateFormat = "dd-MMM-yyyy HH:mm:ss.SSS"
return formatter
}
init() {
let creationDate = Date()
dateTimeStr = SomeData.dateFormatter.string(from: creationDate)
}
var creationDate: Date {
return SomeData.dateFormatter.date(from: dateTimeStr)!
}
var description: String {//just to print
return dateTimeStr
}
}
然后在for循环中创建它:
var objArr = [SomeData]()
for _ in 0...5 {
objArr.append(SomeData())
}
print("\(objArr)")
输出:[18-Oct-2017 12:50:09.684,18-Oct-2017 12:50:09.690,2017年10月18日12:50:09.692,2017年10月18日12:50:09.696, 2017年10月18日12:50:09.699,2017年10月18日12:50:09.704]
如您所见,它们已根据创建时间排序。
但是你还想再次对它进行排序,就像这样:
let sortedObjArr = objArr.sorted(by: { $0.creationDate < $1.creationDate })
print("\(sortedObjArr)")
输出:[18-Oct-2017 12:50:09.684,18-Oct-2017 12:50:09.690,2017年10月18日12:50:09.692,2017年10月18日12:50:09.696, 2017年10月18日12:50:09.699,2017年10月18日12:50:09.704]
如果您想要逆序,请执行以下操作:
let sortedObjArr = objArr.sorted(by: { $0.creationDate > $1.creationDate })
print("\(sortedObjArr)")
产出:[18-Oct-2017 12:50:09.704,18-Oct-2017 12:50:09.699,2017年10月18日12:50:09.696,18-Oct-2017 12:50:09.692, 2017年10月18日12:50:09.690,2017年10月18日12:50:09.684]