如何使用 DispatchGroup 在 for 循环内进行异步调用

2024-03-07

在下面的示例代码中,我调用complete(false)失败时。但是,由于我使用的是DispatchGroup对象来确保所有异步请求都完成,我不能只调用syncGroup.leave()失败时,作为notify将被调用,其中包含complete(true),使该函数返回true,什么时候应该返回false为了失败。

我不打电话是正确的吗syncGroup.leave()未能正确完成我的功能?或者我应该打电话syncGroup.leave()并以某种方式尝试确定结果是什么,这样我就可以返回false失败时?

let syncGroup = DispatchGroup()
syncGroup.enter()
for track in unsynced {
    register(time: time, withCompletion: { (success: Bool) -> () in

        if success {
            self.debug.log(tag: "SyncController", content: "Registered")
            syncGroup.leave()
        }
        else {
            complete(false)
        }
    })
}

//all requests complete
syncGroup.notify(queue: .main) {
    self.debug.log(tag: "SyncController", content: "Finished registering")
    complete(true)
}

您必须在 for 循环中输入该组。您可能想引入一个额外的错误标志。

实施示例:

    var fail = false
    let syncGroup = DispatchGroup()

    for track in unsynced {
        syncGroup.enter()
        register(time: time, withCompletion: { (success: Bool) -> () in

            if success {
                self.debug.log(tag: "SyncController", content: "Registered")
                syncGroup.leave()
            }
            else {
                fail = true
                syncGroup.leave()
            }
        })
    }

    //all requests complete
    syncGroup.notify(queue: .main) {
        if fail {
            complete(false)

        } else {
            self.debug.log(tag: "SyncController", content: "Finished registering")
            complete(true)
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 DispatchGroup 在 for 循环内进行异步调用 的相关文章

  • 如何在 Swift 3 中解析 JSON 数组 [重复]

    这个问题在这里已经有答案了 我从 Socket 获取了一些我想访问的数据 但收到错误消息 指出每次都无法将 NSArray 转换为 NSDictionary struct SocketEventHandler let event Strin
  • 暂停视频录制[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试创建一个应用程序 用户可以在其中从相机录制视频 该应用程序的功能之一必须是文件录制中的暂停 例如 用户通过按 开始 按钮开始
  • ITMS-90535 无法使用最新的 Google Signin SDK 发布 iOS 应用程序

    我正在使用 xcode 7 GM 种子并通过 cocoapods 安装了最新的 Google Signin SDKpod Google SignIn 当我尝试将我的应用程序发布到苹果应用程序商店时 我收到附加错误 Help 以下是 Goog
  • Transit MKDirectionsRequest 产生 null 错误 Error Domain=MKErrorDomain Code=5 "(null)"

    我正在尝试使用 MapKit Directions Request 来获取两个坐标之间的交通方向 当我切换到其他 非 Transit 类型时 下面的代码可以工作 但是当我切换到 Transit 时 它会抛出一个错误 该错误在 Apple 文
  • 如何检测Retina高清显示屏?

    UIScreen有一个新的 nativeScaleiOS 8 中的属性 但文档没有提及它 property nonatomic readonly CGFloat nativeScale 还有一个scale属性 但文档说它是 2 用于视网膜显
  • 在另一种语言中使用 dateFormatter [重复]

    这个问题在这里已经有答案了 我正在运行一段返回的代码nil在具有不同语言设置的 iPhone 上运行时 代码示例如下所示 let dateFormatter DateFormatter dateFormatter dateFormat MM
  • UICollectionView 未出现

    我正在尝试设置UICollectionView 以编程方式在我的视图控制器中扩展UIViewController 由于某种原因 我的收藏视图根本没有显示 以下是我所拥有的 为什么没有出现 我将它连接到委托和数据源并将其添加为子视图self
  • Swift 中带圆角的 NSWindow

    我想要一个圆角的窗户 但我在每个角落都有一个白点 Code let effect NSVisualEffectView frame NSRect x 0 y 0 width 0 height 0 effect blendingMode be
  • Swift 3.0 Pin 颜色注释在 MapView 中没有改变

    我有兴趣根据案例场景更改注释的图钉颜色 在一个函数中 我发送了一个数组 用于确定引脚注释的颜色 到目前为止 我已经设置了一个名为 ColorPointAnnotation 的子类 它将确定 pinColor 然后 在 switch 语句中
  • 为什么我的 tableView 函数运行了 3 次?

    我有一个 UITableView 并且有执行它所需的方法之一 func tableView tableView UITableView numberOfRowsInSection section Int gt Int println sec
  • Swift 中具有透明背景的按钮边框

    我怎样才能做一个UIButton边框看起来像下图 入门 按钮一样具有透明背景吗 我应该如何使用情节提要来实现这一点 或者如何以编程方式实现这一点 设置backgroundColor to clearColor使按钮透明 例如尝试下面的代码
  • 混合静态和动态 UITableViewController 内容会导致 NSRangeException

    我一直在寻找这个错误 并找到了一些具有类似行为的帖子 但没有解决问题的解决方案 我有一个 UITableViewController 在 SB 中声明为静态 它具有以下部分 第 0 部分 配方 是静态的 有 4 个单元格 第 1 部分 口味
  • 我可以知道 requireGestureRecognizerToFail 到底会做什么吗?

    谁能告诉我下面的代码行到底会做什么 我已经提到过Apples https developer apple com library ios documentation uikit reference UIGestureRecognizer C
  • 应用程序传输安全已禁用,但仍然出现 SSL 握手错误

    我在通过 HTTPS SSL 连接到 API 时遇到问题 我已经使用下面的字典完全禁用了应用程序传输安全性 ATS 尽管 SSL 证书通过了 NSCURL 的所有测试
  • 我什么时候应该对 IBOutlet 使用弱或强限定符? [复制]

    这个问题在这里已经有答案了 可能的重复 ARC 下 IBOutlets 应该强还是弱 https stackoverflow com questions 7678469 should iboutlets be strong or weak
  • 在 Instruments 中查找内存泄漏行

    我是 iOS 中的仪器新手 我正在尝试使用 Xcode 4 5 2 并按照本教程查找仪器中的内存泄漏 http soulwithmobiletechnology blogspot sg 2011 04 how to check memory
  • 按范围迭代数组

    我有一个数组 1 2 3 4 5 6 100 我希望将此数组迭代 5 次 具体来说 取数组的前 5 个数字并获取平均值 继续处理接下来的 5 个数字并获取平均值 依此类推 我尝试过多种方法 例如Dequeue和 for 循环但未能获得所需的
  • 退出导航控制器

    我试图离开初始视图控制器 并进入空白视图控制器 这很好 但是这会使空白视图控制器也成为导航控制器的一部分 这不是我想要的 我想脱离视图控制器 在视图控制器中 我尝试退出 它会自行弹出 当我尝试视图中的方法时 将出现目标视图控制器 self
  • ActionScript、NetStream.Play.Failed iOS AIR 移动设备

    我正在尝试以类似于 Tiberiu Ionu Stan http stackoverflow com questions 2036107 aac mp4 not working in actionscript 3s netstream 的方
  • ResponseSerializer“无法使用 Swift 3 调用非函数类型“NSHTTPURLResponse”的值?

    我一直在使用以下代码 没有出现任何问题 直到更新到 Xcode 8 beta 6 它类似于这个例子 https github com Alamofire Alamofire generic response object serializa

随机推荐

  • 在本地主机上运行的 asp.net 应用程序上使用 https

    我创建了一个 asp net Web 应用程序 其中包含一个名为 Main aspx 的 Web 表单 我正在尝试通过 https 运行该应用程序 由于我没有 SSL IIS 等方面的经验 我在 google 上搜索了如何实现这一目标 但每
  • 如何通过Windows Defender SmartScreen保护? [复制]

    这个问题在这里已经有答案了 我试图防止我的应用程序 安装程序 不会被阻止Windows 智能屏幕保护 我使用 BitRock 并手动签署了我的安装程序 但我总是遇到这个问题 我购买了有效的证书 并且带有时间戳的签名没问题 这是一个商业应用程
  • HTTP 中的 POST 和 PUT 有什么区别?

    背景资料分析 根据RFC 2616 第 9 5 节 https www rfc editor org rfc rfc2616 section 9 5 POST习惯于create资源 POST 方法用于请求源服务器接受请求中包含的实体 作为请
  • 如何从 Base64 编码字符串构造 java.security.PublicKey 对象?

    我有一个来自外部源 Android Store 的 bse64 编码字符串公钥 我需要用它来验证签名内容 如何将字符串转换为 java security PublicKey 接口的实例 如果这有什么区别的话 我正在使用 Java 6 密钥
  • Cocos2d-x:可以使用HTML(UIWebView)吗?

    我正在尝试cocos2d x现在我可以为 Android 构建 Javascript 示例并在浏览器中运行它们 现在我想创建自己的游戏 但由于有 HTML 背景 我宁愿使用 HTML 标签和 CSS 也不愿使用 Javascript 来设置
  • PHPExcel 检查工作表是否存在

    我正在使用 phpExcel 但找不到任何内容来检查工作表是否存在 我想要完成的是这样的事情 if excel gt sheetExists 1 excel gt createSheet 1 sheet excel gt setSheet
  • syscall_table 在 x86_64 内核中的什么位置?

    我正在尝试向 Linux 内核 x86 64 添加新的系统调用 基于本文 http techeclipse com how to linux kernel 其中解释了如何将系统调用添加到内核 x86 该文章说我需要在名为的文件中定义我的系统
  • 警告“演示正在进行时!”的含义

    当我整合Instagram在我的项目中 我得到了image from UIImagePickerController之后我想把它发送到Instagram但是当我发送时image to Instagram by UIDocumentInter
  • 将自定义域映射到 openshift wordpress 博客

    我有一个 openshift wordpress 博客 运行在http blog example rhcloud com http blog example rhcloud com 并在我的 DNS 管理中添加 CNAME 记录 如下所示
  • 我如何知道训练数据足以用于机器学习

    例如 如果我想训练一个分类器 也许是SVM 我需要收集多少样本 有没有一个测量方法呢 知道需要收集多少样本并不容易 不过 您可以按照以下步骤操作 解决典型的机器学习问题 构建一个包含几个样本的数据集 a 有多少个 这取决于您遇到的问题类型
  • 在增量搜索 JS 中设置突出显示文本的样式

    第一个 StackOverflow 问题 哇 关于这段 Javascript 样式的简单问题 Search search keydown function e setTimeout function if search val histor
  • JAVA 中的 PIG UDF 错误 1070

    我创造了UDF UPPER jar文件输入 home GED385 pigScripts GED385 snshadoope1 pigScripts jar tf home GED385 pigScripts UDF UPPER jar g
  • 如何使用 intersphinx 正确链接到 PyQt5 文档?

    我在尝试链接到时遇到了一些麻烦PyQt5 文档 http pyqt sourceforge net Docs PyQt5 using intersphinx 尝试交叉引用任何QtCore类 例如QThread 没有像我预期的那样工作 我已经
  • 在 Elasticsearch 中插入多个文档 - 批量文档格式化程序

    太长了 如何批量格式化 JSON 文件以摄取到 Elasticsearch 我正在尝试将一些 NOAA 数据提取到 Elasticsearch 中并一直在利用NOAA Python SDK https github com paulokuo
  • VS 2013可以安装在Server 2003 R2上吗

    我可以在 Windows Server 2003 R2 上安装 Visual Studio 2013 吗 根据 Visual Studio 2013系统要求 http www visualstudio com en us products
  • 我该如何将 HOME 键绑定为 tmux 前缀?

    有没有办法在 tmux conf 中执行此操作 如果其他一切都配置正确 那么应该很简单 只需将其放入您的 tmux conf set option g prefix Home 注意 除非您手动 获取 您的 tmux conf 对文件的更改仅
  • 在 JavaScript 中提升变量

    据我了解 变量提升是在 Java 脚本中完成的 我无法理解为什么它输出为未定义 do something var foo 2 console log foo do something it prints 2 do something con
  • MVC 5 Bootstrap 模式不起作用

    我仍处于 MVC 学习模式 我需要的一件事是删除确认模式 我想使用 Bootstrap 来做到这一点 我四处搜索并想出了一些例子 我已经看过几次了 但我似乎无法让它发挥作用 我确保已下载最新版本的 Bootstap v3 3 5 并将其保存
  • 根据 SDK 级别忽略 Android 单元测试

    是否有注释或其他方便的方法来忽略特定 Android SDK 版本的 junit 测试 有没有类似Lint注解TargetApi x 的东西 或者我是否必须手动检查是否使用 Build VERSION 运行测试 我认为还没有准备好 但为此创
  • 如何使用 DispatchGroup 在 for 循环内进行异步调用

    在下面的示例代码中 我调用complete false 失败时 但是 由于我使用的是DispatchGroup对象来确保所有异步请求都完成 我不能只调用syncGroup leave 失败时 作为notify将被调用 其中包含complet