swift - “删除信息”如果其值为空 Firestore Swift
问题描述
我有这段代码可以从 Firestore 获取信息:
struct Spty: Identifiable{
var id: String
var spty: String
var r: NSNumber
var g: NSNumber
var b: NSNumber
}
class SptyViewModel: NSObject, ObservableObject{
@Published var specialities = [Spty]()
@Published var search = ""
func fetchData(){
let db = Firestore.firestore()
db.collection("specialities").addSnapshotListener { (querySnapshot, error) in
guard let documents = querySnapshot else {return }
self.specialities = documents.documents.compactMap { (doc) -> Spty? in
let id = doc.documentID
let spty = doc.get("spty") as? String ?? ""
let r = doc.get("r") as? NSNumber ?? 0
let g = doc.get("g") as? NSNumber ?? 0
let b = doc.get("b") as? NSNumber ?? 0
return Spty(id: id, spty: spty, r: r , g: g , b: b )
}
}
}
}
我@StateObject
用来引用它并ForEach
显示数据。
如果在 Firestore 中,我在集合中创建了一个文档,但没有创建上面列出的字段(spty、r、g、b),我将得到一个黑色矩形(如上面的代码)。
我想要的是:如果没有正确的字段(例如,spty),它将被遗忘(而不是显示黑色矩形,例如:如果我有 4 个正确的文档并且只是添加一个没有正确字段的新文档,我只会得到正确的 4 ,而不是 5 )。
我知道这与as有关?细绳 ??""
, 我只是不知道是什么
解决方案
答案很简单:
let id = doc.documentID
if let spty = doc.get("spty") as? String,
let r = doc.get("r") as? NSNumber,
let g = doc.get("g") as? NSNumber,
let b = doc.get("b") as? NSNumber{
return Spty(id: id, spty: spty, r: r , g: g , b: b )
}
else{
return nil
}
添加了一个 if 语句
推荐阅读
- android-studio - 如何在recyclerview中突出显示选定的项目?
- firebase - Google Analytics 4 和 Firebase - 如何使用不需要的推荐列表
- jquery - 有没有更优化的方法来编写这个 _blank 属性到目标链接(在新选项卡中打开它们)的 jQuery 代码?
- python - 相比之下,超过了最大递归深度。我收到此错误,但我不知道为什么我在 python 中收到此错误
- java - org.graalvm.polyglot.PolyglotException:ReferenceError:文档未定义
- ios - Swift 表格视图单元格更改数据
- flowtype - 编写函数`objectToMap`
- .net-core - 带有 dotnet core 5 的 Openiddict 将错误显示为“此服务器仅接受 HTTPS 请求”。
- laravel - 将 Vuex-ORM 添加到 Laravel Nova 工具
- python - ELM 分类器为二进制分类提供零精度