我是Swift的新开发人员。我正在使用Xcode 10.2和Swift 4.2。
我正在尝试将Firestore Timestamp
存储在用户默认设置中并进行检索。我遇到的问题是我第一次获取时间戳记,可能是nil,所以我想使用默认值。但是我不知道如何将任何日期格式化为Firestore Timestamp
,因此我可以指定默认日期为2000年1月1日。我查看了Firebase文档,但找不到如何获取可读日期并将其格式化为一个时间戳(似乎所有方法都已被Firebase弃用)。
这是我的代码,以尝试使用默认值2000年1月1日来读取存储的日期,但这不起作用:
// Get a reference to a default date of January 1, 2000.
let dateformatter = DateFormatter()
let defaultDate = dateformatter.date(from: "01/01/2000 12:00 AM")
// Get the last date the table was updated.
let lastDateNSData = UserDefaults.standard.object(forKey: Constants.LocalStorage.rateTableTimeStamp) as? Data
let lastDate = NSKeyedUnarchiver.unarchiveObject(with: lastDateNSData ?? Data(Timestamp(date: defaultDate!))) as! Timestamp
我在Data(Timestamp(date: defaultDate!))
上遇到一个错误,提示'Timestamp' does not conform to expected type 'Sequence'
,我认为这是因为我使用defaultDate
格式化dateformatter
的原因。但是我不知道另一种方式。
如果有帮助,这是我的代码,用于将当前日期作为时间戳写入默认值:
// Update the timestamp.
let now = Timestamp(date: Date())
let nsNow = NSKeyedArchiver.archivedData(withRootObject: now)
UserDefaults.standard.set(nsNow, forKey: Constants.LocalStorage.rateTableTimeStamp)
答案 0 :(得分:0)
您需要将其设置为object
UserDefaults.standard.set(Date(), forKey:"key")
阅读
if let date = UserDefaults.standard.object(forKey: "key") as? Date {
////
}
if UserDefaults.standard.bool(forKey: "Opened") {
// set date here
UserDefaults.standard.set(true, forKey: "Opened")
}