我有这个代码:
func function(completion: @escaping (_ error: Error?) -> Void){
getSomethingFromUrl {(result) in
guard let documentData = result.property else {
completion(nil) //crashes with error Thread 1: EXC_BREAKPOINT (code=1, subcode=0x102ba1774)
return
}
}
}
有时它会在completion(nil) 行 崩溃,并显示错误代码
Thread 1: EXC_BREAKPOINT (code=1, subcode=0x102ba1774)
考虑到参数是可选的,我不知道为什么它会崩溃,我只是将 nil 传递给它。
这是我用来调用完成处理程序的确切代码。它位于 firestore 事务的完成 block 中:
let docSizesRef = FirebaseHelper.References.firestoreReference.collection(FirestoreCollections.onlineUsers).document(FirestoreDocuments.documentSizeTracker)
FirebaseHelper.References.firestoreReference.runTransaction({ (transaction, errorPointer) -> Any? in
let docSizesDocument: DocumentSnapshot
do {
try docSizesDocument = transaction.getDocument(docSizesRef)
} catch let fetchError as NSError {
errorPointer?.pointee = fetchError
return nil
}
let oldCount = docSizesDocument.data()?[documentIdToWriteTo] as? Int ?? 0
transaction.updateData([documentIdToWriteTo: oldCount + 1], forDocument: docSizesRef)
return nil
}) { (object, error) in
completion(error)
if let error = error {
print("Transaction failed: \(error)")
} else {
print("Transaction successfully committed!")
}
}
这是处理完成的代码
func addUserToOnlineDocs(){
User.shared.managers.accountManager.addToOnlineDocs(completion: { (error) in
if let error = error{
self.createTwoButtonAlert(title: AlertErrors.Account.Titles.errorAddingToOnlineList, message: error.localizedDescription, rightButtonText: self.retryButton, leftButtonText: self.ignoreButton, rightButtonStyle: .cancel, leftButtonStyle: .default, completion: { (buttonPressed) in
if buttonPressed == self.retryButton{
connectionSetup()
}
})
return
}
self.loadingCompleteDispatchGroup.leave()
})
}
会不会是事务多次调用completion handler的问题?
最佳答案
尝试添加; 否则{ 完成(无);返回
关于swift - 转义采用可选参数的完成处理程序有时会使 Swift 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52013728/