Swift: 等待信号量时显示 UIAlert

Swift: Show UIAlert while waiting for semaphore

我正在使用 CocoaAsyncSocket pod 将数据从测量仪器传输到 iOS 设备。传输效果很好,但如果我必须在不同的移动设备之间切换,我就会遇到麻烦。

如果我需要更换仪器/连接到另一个仪器,我必须等待一些事件:

  1. 我必须确保断开连接。这通常是通过等待 GCDAsyncSocketDelegate
  2. 中包含的 public func socketDidDisconnect(...) 来完成的
  3. 我必须连接到另一台仪器。如果还是tcp接口,我还要等public func socketDidConnectToHost(...)

所以有两个操作需要一些时间。因为没有有效的连接,用户只能等待。为了通知用户发生了什么,我想在上述事件完成之前显示一个 UIAlert。我怎样才能做到这一点?

Semaphores 对你的情况来说似乎太低了,除非你是为了教育目的而这样做。

改为使用 NotificationCenter

1) Post 来自 socketDidDisconnect(...)"didDisconnectNotification" (字符串名称是任意的)并且在其中是 对应的 处理程序更新您的 viewController UI 表明用户存在​​连接问题。
2) Post 来自 socketDidConnectToHost(...)"didConnectNotification" 并在其处理程序中(与 1 不同)消除连接问题指示器^.

注意: 在你的 viewController 第一次出现时,你可能会从 2) 开始,所以没有什么可以忽略的。

您可以在 SO 上找到许多与 NotificationCenter 相关的示例:

在上述两个操作独立的情况下(即它们可以以任何相对于彼此的顺序发生),使用的 GCD 机制将是 DispatchGroup。它有点接近于您尝试使用信号量,但是您也不需要它,因为您的 2 个事件(断开和连接)是 相关的 (即它们各自的出现顺序是 fixed)。
DispatchGroup 的一个有效使用案例是同步许多图像获取请求的响应,而您不关心它们的到达顺序(您要么获取所有请求,要么不继续)。