有人知道如何解决这个问题吗?
声明的关闭结果"InstockProduct?"与上下文类型"InstockProduct"不兼容
class Database {
let db = Firestore.firestore()
var products = [InstockProduct]()
func getProductsInCollection(collection: String, handler: @escaping ([InstockProduct]) -> Void) {
db.collection("/products/instock/(collection)").addSnapshotListener { querySnapshot, err in
guard let documents = querySnapshot?.documents else{
print("No document")
handler([])
return
}
self.products = documents.map { (queryDocumentSnapshot) -> InstockProduct in
return try? queryDocumentSnapshot.data(as: InstockProduct.self)
}
}
}
}
代码图像
您已将products
声明为[InstockProduct]
(带有非可选项(。
此外,在闭包中,您有一个指定为InstockProduct
的返回类型(也是非可选的(。
但是,在您的退货声明中,当您这样做时,您会返回一个可选项:
return try? queryDocumentSnapshot.data(as: InstockProduct.self)
考虑到try
可能会失败,我会更改您的代码以返回一个可选项,然后使用compactMap
从最终数组中删除这些可选项:
self.products = documents.compactMap { (queryDocumentSnapshot) -> InstockProduct? in
return try? queryDocumentSnapshot.data(as: InstockProduct.self)
}