#ios #swift #date #timestamp
#iOS #swift #Дата #временная метка
Вопрос:
Я настраиваю свою первую базу данных Firestore, и у меня есть несколько полей даты, сохраненных в виде временных меток. В моей структуре swift соответствующие свойства объявляются как Дата. Первый вопрос — это правильный способ сделать это? если да, то как мне получить эти значения метки времени? Я пытался найти решение, но оно не кажется очевидным решением.
struct HealthLog1: Codable {
var comment: String?
var entryDate: Date?
var familyMemberID: String?
var logID: String?
var user_ID: String?
}
db.collection("healthLogs").whereField("familyMemberID", isEqualTo: person.familyMemberID!).getDocuments { (snapshot, error) in
if error == nil amp;amp; snapshot != nil {
for doc in snapshot!.documents {
let log = HealthLog1(
comment: doc["comment"] as? String,
entryDate: doc["entryDate"] as? Date,
familyMemberID: doc["familyMemberID"] as? String,
logID: doc["logID"] as? String,
user_ID: doc["user_ID"] as? String)
healthLogs.append(log)
}
self.delegateHLP?.receiveLogs(healthLogs: healthLogs)
}
else {
print ("there is some error with the get documents")
}
}
}
Ответ №1:
Объявите дату как временную метку.
Ваша модель
class HealthLog1: Codable {
var comment: String?
var entryDate: Timestamp? //<-- Declare Timestamp
var familyMemberID: String?
var logID: String?
var user_ID: String?
}
Инициализация
let log = HealthLog1(
comment: doc["comment"] as? String,
entryDate: doc["entryDate"] as? Timestamp,
familyMemberID: doc["familyMemberID"] as? String,
logID: doc["logID"] as? String,
user_ID: doc["user_ID"] as? String)
Если вам нужна дата из значения метки времени, используйте dateValue()
:
let entryDate = log.entryDate.dateValue()