【发布时间】:2020-06-09 16:26:28
【问题描述】:
当我尝试运行以下代码时,我看到的错误是:
无法转换“任何?”类型的值到预期的参数类型“字符串”
在返回线上。如何解决此错误?此功能正在尝试从文档中获取数据,以便我可以编辑。谢谢!
db.collection("routines").whereField("uid", isEqualTo: currUser?.uid).addSnapshotListener { (querySnapshot, error) in
guard let documents = querySnapshot?.documents else {
print("No documents")
return
}
self.routines = documents.map { queryDocumentSnapshot -> Routine in
let data = queryDocumentSnapshot.data()
let id = data["id"]
let routine = data["routine"] as? String ?? ""
return Routine(id: id, routine: routine)
}
}
编辑 将 id 更改为 let id = String(describing: data["id"]!) 以使其工作。很想知道这是否是正确的做法!
根据以下答案进行编辑 尝试了您的建议,但似乎无法使其发挥作用。该视图最终没有显示我的任何例程。
型号
struct Routine: Identifiable, Codable {
@DocumentID var id: String?
var routine: String
var uid: String
enum CodingKeys: String, CodingKey {
case id
case routine
case uid
}
}
视图模型
class RoutinesViewModel: ObservableObject {
@Published var routines = [Routine]()
var db = Firestore.firestore()
let currUser = Auth.auth().currentUser
func fetchData() {
db.collection("routines").whereField("uid", isEqualTo: currUser?.uid).addSnapshotListener { (querySnapshot, error) in
guard let documents = querySnapshot?.documents else {
print("No documents")
return
}
self.routines = documents.compactMap { queryDocumentSnapshot -> Routine? in
return try? queryDocumentSnapshot.data(as: Routine.self)
}
查看
List {
ForEach(viewModel.routines) { routine in
HStack {
Text("\(routine.routine)")
}
}
}
【问题讨论】: