特定对象创建日期和时间

时间:2017-10-18 10:24:22

标签: swift sorting

我在for循环中创建对象,需要特定的创建日期和时间,以便我可以告诉他们创建的顺序。我还需要将此dateTime保存为{{ 1}}并且仍然能够从中获得创作顺序 这可能吗?

我理解如何获取创建对象的日期和时间,但在转换为字符串时它不够具体。

目前我只有一个小日期扩展名:

String

但这显然不够准确,而且我认为在这段时间内增加几毫秒也不会有多大帮助?

我理解通过向对象添加计数等可以解决这个问题,以便我可以使用它来获取订单,但我知道如果我在将其转换为字符串之前使用Date它会正确地命令它,所以有隐藏在那里的一些信息我也需要转换为字符串。

1 个答案:

答案 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]