Сохранение метки времени в Firestore в пользовательских настройках по умолчанию - PullRequest
0 голосов
/ 18 июня 2019

Я новый разработчик Swift. Я использую Xcode 10.2 и Swift 4.2.

Я пытаюсь сохранить Firestore Timestamp в настройках пользователя по умолчанию и получить его. Проблема, с которой я сталкиваюсь - это первый раз, когда я получаю метку времени, она может быть нулевой, поэтому я хотел бы иметь значение по умолчанию. Но я не знаю, как отформатировать какую-либо дату как Firestore Timestamp, поэтому я могу указать значение по умолчанию от 1 января 2000 года. Я просмотрел документацию FireBase, но не смог найти, как взять читаемую дату и отформатировать ее как метку времени. (кажется, все методы устарели в firebase).

Вот мой код для чтения сохраненной даты с попыткой использовать 1 января 2000 г. по умолчанию, но это не работает:

// 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 голосов
/ 18 июня 2019

Вам нужно установить его как 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")
}
...