在用户默认设置中存储Firestore时间戳

时间:2019-06-18 15:35:29

标签: swift firebase google-cloud-firestore timestamp nsuserdefaults

我是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)

1 个答案:

答案 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")
}