swift - 检查 Swift 3 中是否在正确的调度队列中

标签 swift grand-central-dispatch swift3

我有几个单元测试,我想在其中测试是否在正确的调度队列上调用回调。

在 Swift 2 中,我将当前队列的标签与我的测试队列进行了比较。但是在 Swift 3 中,DISPATCH_CURRENT_QUEUE_LABEL 常量不再存在。

我确实找到了 dispatch_assert_queue 函数。这似乎是我需要的,但我不确定如何调用它。

我的 Swift 2 代码:

let testQueueLabel = "com.example.my-test-queue"
let testQueue = dispatch_queue_create(testQueueLabel, nil)

let currentQueueLabel = String(UTF8String: dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL))!
XCTAssertEqual(currentQueueLabel, testQueueLabel, "callback should be called on specified queue")

更新:

我对缺少自动完成感到困惑,但可以使用 __dispatch_assert_queue:

if #available(iOS 10.0, *) {
  __dispatch_assert_queue(test1Queue)
}

虽然这确实适用于单元测试,但它很烦人地用 EXC_BAD_INSTRUCTION 停止了整个过程,而不仅仅是测试失败。

最佳答案

使用dispatchPrecondition(.onQueue(expectedQueue))dispatch_assert_queue() C API 的 Swift 3 API 替换。

WWDC 2016 GCD session (21:00,幻灯片 128)对此进行了介绍: https://developer.apple.com/videos/play/wwdc2016/720/

关于swift - 检查 Swift 3 中是否在正确的调度队列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37952262/

相关文章:

ios - 检查数组是否具有相同的纬度经度 swift

ios - 如何在不使用 dispatch_get_current_queue() 的情况下验证我是否在给定的 GCD 队列上运行?

ios - Grand Central Dispatch EXC_BAD_ACCESS 异常

ios - 是否可以重新加载 UITableView 除了部分的特定行?

ios - 四舍五入为偶数

ios - syscall_thread_switch iOS 8.3 竞赛 - CocoaLumberjack 错误?如何调试这个?

ios - TableView 在观察 .childAdded 时继续添加行,即使在 Firebase 中未添加子项也是如此

ios - 使用 Alamofire post 方法登录

ios - 无法在 iOS 设备上从 Apple Store 接收通知(fcm)

ios - 如何在网站内容更改时发送推送通知