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