Swift 在展开快照时发现无,但它仅随机发生

Swift 在展开快照时发现无,但它仅随机发生,swift,Swift,因此,当我在Versettle中获取快照的数据时,有时当它随机加载时崩溃,当我说随机时,我的字面意思是随机加载,就像它在iPhone 8上工作,在11 idk上崩溃,为什么它加载的速度可能如此之快,但无论如何都可以安全地打开它 func loadVersestoFirebase(){ FirebaseReferece(.Verses).addSnapshotListener { (snapshot, error) in guard let snapshot = sna

因此,当我在Versettle中获取快照的数据时,有时当它随机加载时崩溃,当我说随机时,我的字面意思是随机加载,就像它在iPhone 8上工作,在11 idk上崩溃,为什么它加载的速度可能如此之快,但无论如何都可以安全地打开它

 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)
}

您正在安全地展开它,但不是
错误
对象,所以在打印之前可能要这样做