Я использую Firestore в качестве базы данных, и теперь я хочу сохранить временную метку сервера при регистрации пользователя.Этот вопрос противоположен Android
FieldValue.serverTimestamp()
Это класс модели
struct NotificationModel: Identifiable, Codable {
var id: String? = nil
var title: String?
var body: String?
var timestamp: Date?
init(title: String, body: String, timestamp: Date) {
self.title = title
self.body = body
self.timestamp = timestamp
}
}
Я хочу эту отметку времени в своем классе моделей.
Как я могу добиться чего-то подобного?
.document(ID).collection("notifications").order(by: "timestamp", descending: true).addSnapshotListener { (snapshot, error) in
Это целый код, который я decode
документ от Firestore
до Json
func readUserNotifications<T: Decodable>(from collectionReference: FIRCollectionReference, get userId: String, returning objectType: T.Type, fromType collectionCell: FIRCollectionCell, completion: @escaping ([T], _ sucess: Bool) -> Void) {
collectionReferences(to: collectionReference).document(userId).collection("notifications").order(by: "timestamp", descending: true).addSnapshotListener { (snapshot, error) in
var objectsAppend = [T]()
if let error = error {
print(error.localizedDescription)
}
guard let snapshot = snapshot else {
print("Doesn't have snapshot")
return
}
do {
for document in snapshot.documents {
//print(try document.decode(as: NotificationModel.self))
let object = try document.decode(as: objectType.self, includingId: true)
objectsAppend.append(object)
}
if objectsAppend.isEmpty {
objectsAppend.removeAll()
completion(objectsAppend, false)
} else {
completion(objectsAppend, true)
}
} catch {
print(error)
}
}
}
Вот моя decode
функция, котораяошибка там
extension DocumentSnapshot {
func decode<T: Decodable>(as objectType: T.Type, includingId: Bool = true) throws -> T {
var documentJson = data()
if includingId {
documentJson["id"] = documentID
}
let documentData = try JSONSerialization.data(withJSONObject: documentJson, options: [])
let decodedObject = try JSONDecoder().decode(objectType, from: documentData)
return decodedObject
}
}