问题描述
我正在使用Swift 5和Firestore开发一个应用程序。 我创建了结构Identifiables和Codables,效果很好,但是在解码嵌套文档的DocumentID时遇到问题。 我无法在网上找到类似的内容。 我想知道我实现的Firestore结构在我的用例中是否正确以及如何解决id问题。
我必须显示一个活动列表,其中仅包含有关用户和运动的一些信息(例如名称和图像)。这就是为什么我试图仅将信息嵌套在Activity对象中的原因,而不必为列表的每个活动查询整个User和Sport。
在Firestore上:
活动文档包含:
info (String)
organizer:
- name (String)
- image (String)
- ref (Reference)
date (Date)
sport:
- name (String)
- image (String)
- ref (Reference)
这是我的代码:
import Foundation
import FirebaseFirestore
import FirebaseFirestoreSwift
struct User: Codable {
@DocumentID var id: String? = UUID().uuidString
let name: String
let email: String?
let image: String
let birthday: Date?
let description: String?
}
struct Sport: Codable {
@DocumentID var id: String? = UUID().uuidString
let name: String
let image: String
}
struct Activity: Codable {
@DocumentID var id: String? = UUID().uuidString
let organizer: User
let info: String
let date: Date
let sport: Sport
static func getActivities(completion: @escaping (_ activities: [Activity]?) -> Void) {
Activity.collectionReference.getDocuments { (querySnapshot,error) in
guard error == nil else {
print("Error: \(error?.localizedDescription ?? "Generic error")")
return
}
let activities = querySnapshot?.documents.compactMap({ (queryDocumentSnapshot) -> Activity? in
return try! queryDocumentSnapshot.data(as: Activity.self)
})
completion(activities)
}
}
}
调用Activity.getActivities我能够获得我需要的一切,但是直接从活动对象解码用户和运动,他们获得的是活动ID,而不是他们自己的ID。这是错误的,因为这样我对对象的引用有误。想法是保留引用以在详细信息页面中使用它并获取完整的对象。 谁能告诉我构造这种架构的最佳方法是什么? 预先谢谢你。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)