我正在使用 CocoaAsyncSocket pod 将数据从测量仪器传输到 iOS 设备。传输效果很好,但如果我必须在不同的移动仪器之间切换,我就会遇到麻烦。
如果我需要更换仪器/连接到另一台仪器,我必须等待一些事件:
- 我必须确保断开连接。这通常是通过等待包含在
GCDAsyncSocketDelegate
中的 - 我必须连接到其他仪器。如果还是tcp接口(interface),就得等
public func socketDidConnectToHost(...)
public func socketDidDisconnect(...)
来完成的
所以有两个操作需要一些时间。因为没有有效的连接,用户只能等待。为了通知用户发生了什么,我想在上述事件完成之前显示一个 UIAlert。我怎样才能做到这一点?
最佳答案
Semaphores 对于您的案例来说似乎太低了,除非您是出于教育目的而这样做。
改为使用 NotificationCenter:
1) 从 socketDidDisconnect(...)
发布一个 "didDisconnectNotification"(字符串名称是任意的),并在其中更新相应的处理程序您的 viewController UI 指示用户存在连接问题。
2) 从 socketDidConnectToHost(...)
发布一个 “didConnectNotification” 并在它的处理程序中(与 1 不同)关闭连接问题指示器^。
注意:在您的 viewController 第一次出现时,您可能会从 2) 开始,所以没有什么可以忽略的。
您可以在 SO 上找到许多与 NotificationCenter
相关的示例:
https://stackoverflow.com/a/24756761/5329717
在上述两个操作独立的情况下(即它们可以以任何相对于彼此的顺序发生),要使用的 GCD 机制将是 DispatchGroup。它有点接近于您尝试使用信号量,但是您也不需要它,因为您的 2 个事件(断开连接和连接)是相关的(即它们各自的顺序发生是固定的)。
DispatchGroup 的一个有效使用案例是当您不关心它们到达的顺序时同步许多图像获取请求的响应(您要么获取所有请求要么不继续)。
关于ios - Swift:在等待信号量时显示 UIAlert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53392527/