声明的闭包结果'?'与上下文类型不兼容



有人知道如何解决这个问题吗?

声明的关闭结果"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)
}

相关内容

  • 没有找到相关文章

最新更新