Ios ListenerService Firebase不处理日期
我的firebase条目的下一个模型用于获取数据:Ios ListenerService Firebase不处理日期,ios,swift,firebase,google-cloud-firestore,Ios,Swift,Firebase,Google Cloud Firestore,我的firebase条目的下一个模型用于获取数据: struct MRecords: Hashable, Decodable { var text: String var date: Date var id: String init(text: String, date: Date, id: String) { self.text = text self.date = date self.id = id } init?(document: DocumentSnapsh
struct MRecords: Hashable, Decodable {
var text: String
var date: Date
var id: String
init(text: String, date: Date, id: String) {
self.text = text
self.date = date
self.id = id
}
init?(document: DocumentSnapshot) {
guard let data = document.data() else { return nil}
guard let text = data["text"] as? String,
let date = data["date"] as? Date,
let id = data["id"] as? String
else { return nil }
self.text = text
self.date = date
self.id = id
}
init?(document: QueryDocumentSnapshot) {
let data = document.data()
guard let text = data["text"] as? String,
let date = data["date"] as? Date,
let id = data["id"] as? String
else { return nil }
self.text = text
self.date = date
self.id = id
}
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
static func == (lhs: MRecords, rhs: MRecords) -> Bool {
return lhs.id == rhs.id
}
func contains(filter: String?) -> Bool {
guard let filter = filter else { return true }
if filter.isEmpty { return true }
let lowercasedFilter = filter.lowercased()
return text.lowercased().contains(lowercasedFilter)
}
}
我正在使用Listener获取数据:
func recordsObserve(records: [MRecords], completion: @escaping (Result<[MRecords], Error>) -> Void) -> ListenerRegistration? {
var records = records
let recordsRef = db.collection(["users", currentUserId, "records"].joined(separator: "/"))
let recordsListener = recordsRef.addSnapshotListener { (querySnapshot, error) in
guard let snapshot = querySnapshot else {
print(1)
completion(.failure(error!))
return
}
snapshot.documentChanges.forEach { (diff) in
guard let record = MRecords(document: diff.document) else { return }
switch diff.type {
case .added:
guard !records.contains(record) else { return }
records.append(record)
case .modified:
guard let index = records.firstIndex(of: record) else { return }
records[index] = record
case .removed:
guard let index = records.firstIndex(of: record) else { return }
records.remove(at: index)
}
}
completion(.success(records))
}
return recordsListener
}
}
但它不起作用!如果我将模型日期属性类型从日期更改为字符串,它将开始工作。我如何才能使它与日期类型而不仅仅是字符串一起工作?这是因为Firebase没有日期类型。您必须将其存储为Firebase时间戳,然后计算并将其转换为日期格式。如果要将日期值存储到firebase中,同样适用。但是,最好使用firebase函数Timestamp将数据存储到firebase中。这是因为firebase没有日期类型。您必须将其存储为Firebase时间戳,然后计算并将其转换为日期格式。如果要将日期值存储到firebase中,同样适用。不过,最好使用firebase函数Timestamp将数据存储到firebase中。您能写一些代码示例,说明如何将模型更改为使用Timestamp吗?@Parcker firestore入门指南中有一些代码,介绍了如何使用时间戳-请参阅。这里也有很多示例,因此您可以编写一些代码示例,例如如何将模型更改为使用时间戳吗?@Parcker《firestore入门指南》中有一些代码显示了如何使用时间戳-请参阅。这里也有很多这样的例子
waitingRecordsListener = ListenerService.shared.recordsObserve(records: records, completion: { (result) in
switch result {
case .success(let records):
self.records = records
self.tableView.reloadData()
case .failure(let error):
print(1)
}
})