我有这个代码:
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
}
}
}
有时它会在完成(nil)行崩溃,并带有错误代码
线程1:EXC_BREAKPOINT(代码=1,子代码=0x102ba1774)
考虑到参数是可选的,我不知道为什么它会崩溃,我只是把零传递给它。
以下是我用于调用完成处理程序的确切代码。它位于消防库事务的完成块中:
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()
})
}
这可能与事务多次调用完成处理程序有关吗?
尝试添加;否则{完成(无);返回}
我基本上想有一个可选的完成处理器,没有参数被传递回来。这是我目前掌握的情况,但显然是错误的。 我不想在完成块中传递任何参数。我只想知道网络调用何时完成,以便刷新UI。我不想在这里刷新UI,因为我希望它充当刷新数据的通用函数。我之所以希望完成处理程序是可选的,是因为有时候刷新完成后我不需要做任何事情。 我也很困惑“逃离”是什么意思。当我做这样的事情时,我通常会有它,但任何清晰都会很好。我在网上做了一
我试图更准确地理解斯威夫特的“关闭”。 但是和太难理解了 我搜索了许多Swift帖子和官方文件,但我觉得这仍然不够。 这是官方文件的代码示例 听说使用< code>@escaping有两种方式和原因 第一个用于存储闭包,第二个用于异步操作目的。 以下是我的问题: 首先,如果执行,则将使用闭包参数执行,并且该闭包将保存在全局变量数组中。 我认为闭包是{self.x=100} {self.x=100}
我正在尝试在我的Swift应用程序中创建一个服务对象,以便更轻松地处理请求。我已经把它连接起来了,但是我可能误解了完成处理器。 我有这个函数,它只是发布到我正在运行的本地APIendpoint。 我需要做的就是把这个名字传给我在这里做的函数 但是,我现在收到此错误。 调用中缺少参数“completion”的参数 我的目标是返回< code>Response对象,这样我就可以访问它的属性,在UI中做
我在地图中的几个位置进行反向地理编码,并希望将其包装为某种常用方法。我所拥有的是作为工作起点的: 但是,如果我想在我的完成方法中添加另一个参数,将会向我的视图返回错误,如下所示: 如果error为,那么我的将失败,因为错误为nil且访问错误。但我不能这样做,因为参数与完成处理程序不匹配。 因此,如果我有一个nil错误,我将如何调用我的完成处理程序?
我目前正在学习swift,几个小时以来我一直在试图理解一个错误。由于查询,我试图从php脚本中获取一个xml文件,我使用一个完成处理程序作为回调来获取这些查询的结果。 问题是我对这些技术感到不舒服,它说缺少论据。 下面是使用完成处理程序的函数: 这是我调用这个函数的一段代码: 这段代码显示有关调用连接的此错误: 我做错了什么?为什么它要两个参数? 非常感谢您的帮助。 埃尔巴托
到目前为止我所掌握的是: > 我定义了完成处理程序 我创建了一个服务函数,它使用这个typealias 我想实现的是,通过引入命名参数,具有更可读的带参数的完成回调。想法就是以这样的方式结束: 或者更好地使error参数可选,因此我可以只调用 问题是我找不到一种方法来更改定义来实现这一点。