Swift 在展开快照时发现无,但它仅随机发生
因此,当我在Versettle中获取快照的数据时,有时当它随机加载时崩溃,当我说随机时,我的字面意思是随机加载,就像它在iPhone 8上工作,在11 idk上崩溃,为什么它加载的速度可能如此之快,但无论如何都可以安全地打开它Swift 在展开快照时发现无,但它仅随机发生,swift,Swift,因此,当我在Versettle中获取快照的数据时,有时当它随机加载时崩溃,当我说随机时,我的字面意思是随机加载,就像它在iPhone 8上工作,在11 idk上崩溃,为什么它加载的速度可能如此之快,但无论如何都可以安全地打开它 func loadVersestoFirebase(){ FirebaseReferece(.Verses).addSnapshotListener { (snapshot, error) in guard let snapshot = sna
func loadVersestoFirebase(){
FirebaseReferece(.Verses).addSnapshotListener { (snapshot, error) in
guard let snapshot = snapshot else {
print("error fetching snapshot for verses", error!)
return
}
snapshot.documentChanges.forEach { (ChangedDocument) in
if(ChangedDocument.type == .added){ // this line means if the chage that happened in the document was equal to added something
let data = ChangedDocument.document.data()
print("we have\(snapshot.documents.count) documents in this array")
let verseID = data["objectID"] as! String // just remember everytime i put rObjectid or r whatever its just a shortcut for the string
let verseTitle = data[rTITLE] as! String
let verseScrip = data[rSCRIPTURE]as! String
let verseNum = data[rVERSENumOrAuthor]as! String
let verseLNum = data[rNumOfLs] as! Int
//INITALIZING AND PASSING THAT WE ARE GETTING FROM FIREBASE AND PASSING IT YO VERSES SO VERSES CAN PASS IT TO THE GENERATEVERSES FUNC IN TABLEVIEW CELL
let vDataModel = verses(VerseIDInit: verseID
, verseTitleInit: verseTitle, verseScriptureInit: verseScrip, verseNumberInit: verseNum, verseLikeNumInit: verseLNum)
self.VerseArray.append(vDataModel)
}
if (ChangedDocument.type == .modified) { //so if the change that happened in firebase is == to a modied which just means change then shit will run
let newData = ChangedDocument.document.data()
let objectID = newData["objectID"] as! String // we get the object id of the uodated item
//now just call the item you want to show the change on which was the Lnumber
//get the object id from the motivationthoughts array
guard let VersesIndex = self.VerseArray.firstIndex(where: {$0.verseId == objectID}) else{return}
var updatedVerses = self.VerseArray[VersesIndex] // so i think we are putting verse index inside of there because it will have the specific OBJECTID
let verseNumL = newData[rNumOfLs] as! Int
updatedVerses.verseLikeNum = verseNumL
self.VerseArray[VersesIndex] = updatedVerses
}
DispatchQueue.main.async {
self.tableview.reloadData()
}
}
}
}
我建议安全地做,比如
let verseID = data["objectID"] as! String // just remember everytime i put rObjectid or r whatever its just a shortcut for the string
let verseTitle = data[rTITLE] as? String
let verseScrip = data[rSCRIPTURE] as? String
let verseNum = data[rVERSENumOrAuthor] as? String
let verseLNum = data[rNumOfLs] as? Int
// Make optional init and instantiate only when all required fields valid
if let vDataModel = verses(VerseIDInit: verseID
, verseTitleInit: verseTitle, verseScriptureInit: verseScrip, verseNumberInit: verseNum, verseLikeNumInit: verseLNum) {
self.VerseArray.append(vDataModel)
}
您正在安全地展开它,但不是
错误
对象,所以在打印之前可能要这样做