嵌套调度组Swift

嵌套调度组Swift,第1张

概述当用户在我的应用程序中创建新组时,我必须将邀请推送到数据库以及其他信息.我已经开始使用Dispatch Groups来跟踪成功发送所有信息的时间,因此我可以解除该视图. 我正在尝试为邀请使用调度组,为所有数据使用另一个调度组.这就是我所拥有的: // Push new data to dbfunc createGroup(onSccess completion:@escaping () -> V 当用户在我的应用程序中创建新组时,我必须将邀请推送到数据库以及其他信息.我已经开始使用dispatch Groups来跟踪成功发送所有信息的时间,因此我可以解除该视图.

我正在尝试为邀请使用调度组,为所有数据使用另一个调度组.这就是我所拥有的:

// Push new data to dbfunc createGroup(onSccess completion:@escaPing () -> VoID) {    let invitedispatchGroup = dispatchGroup()    let datadispatchGroup = dispatchGroup()    let uID = FIRAuth.auth()?.currentUser?.uID    let name = String(uID!) + "_" + nameTextFIEld.text!    // push invites    datadispatchGroup.enter()    for invite in invites {        invitedispatchGroup.enter()        let ref = FIRDatabase.database().reference().child("users").child(invite.ID).child("invites")        ref.updateChildValues([name: nameTextFIEld.text!]) { (error,ref) -> VoID in            invitedispatchGroup.leave()        }    }    invitedispatchGroup.notify(queue: dispatchQueue.main,execute: {        datadispatchGroup.leave()    })    // store picture    datadispatchGroup.enter()    let storageRef = Firstorage.storage().reference().child("profile_images").child("\(name).png")    if let uploadData = UIImagePNGRepresentation(profImage.resizeImage(targetSize: CGSize(wIDth: 500,height: Int(500*(profImage.size.height/profImage.size.wIDth))))) {        storageRef.put(uploadData,Metadata: nil,completion: { (Metadata,error) in            datadispatchGroup.leave()        })    }    // store pet info    datadispatchGroup.enter()    let petRef = FIRDatabase.database().reference().child("pets").child(name)    petRef.setValue(["mod":uID!,"name":nameTextFIEld.text!,"members":[uID!]]) { (error,ref) -> VoID in        datadispatchGroup.leave()    }    // store user info    datadispatchGroup.enter()    let userRef = FIRDatabase.database().reference().child("users").child(uID!).child("pets")    userRef.updateChildValues([name: true]) { (error,ref) -> VoID in        datadispatchGroup.leave()    }    datadispatchGroup.notify(queue: dispatchQueue.main,execute: {        completion()    })}

如您所见,当invitesDipatchGroup完成时,它将保留相应的datadispatchGroup.

我是dispatch小组的新手,想听听这是否是采取这种任务的正确方法.

这是异步任务跟踪的一种非常好的方法.

检查所有代码路径是否都包含leave()非常重要.你有一个潜在的错误,如果if let没有值不是可选的.修正了这里:

func createGroup(onSccess completion:@escaPing () -> VoID) {    [...]    // store picture    datadispatchGroup.enter()    let storageRef = Firstorage.storage().reference().child("profile_images").child("\(name).png")    if let uploadData = UIImagePNGRepresentation(profImage.resizeImage(targetSize: CGSize(wIDth: 500,error) in            datadispatchGroup.leave()        })    } else {        datadispatchGroup.leave()    }    [...]}

通常,还要确保在所使用的方法的所有代码路径中调用所有完成块. Firebase中可能存在一个错误,或者可能在这些方法的文档中没有调用完成.但同样,这是要走的路.

总结

以上是内存溢出为你收集整理的嵌套调度组Swift全部内容,希望文章能够帮你解决嵌套调度组Swift所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1089328.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存