Swift: Показать UIAlert во время ожидания семафора - PullRequest
0 голосов
/ 20 ноября 2018

Я использую модуль CocoaAsyncSocket для передачи данных с измерительного прибора на устройство iOS.Передача работает довольно хорошо, но у меня возникают проблемы, если мне приходится переключаться между различными мобильными инструментами.

Если мне нужно сменить инструмент / подключиться к другому инструменту, мне придется подождать некоторых событий:

  1. Я должен быть обязательно отключен.Обычно это делается путем ожидания public func socketDidDisconnect(...), включенного в GCDAsyncSocketDelegate
  2. , который я должен подключить к другому инструменту.Если это все еще интерфейс tcp, я должен ждать public func socketDidConnectToHost(...)

Так что есть две операции, которые занимают некоторое время.Поскольку нет действительного соединения, пользователь просто может подождать.Чтобы проинформировать пользователя о том, что происходит, я хотел бы представить UIAlert до тех пор, пока упомянутые события не будут закончены.Как мне этого добиться?

1 Ответ

0 голосов
/ 20 ноября 2018

Семафоры кажутся слишком низким уровнем для вашего случая, если вы не делаете это в образовательных целях.

Использование NotificationCenter вместо:

1) Опубликовать "didDisconnectNotification" (произвольное имя строки) из socketDidDisconnect(...) и в его соответствующий обработчик обновляет пользовательский интерфейс viewController, указывая пользователю на проблему с подключением.
2) Публикует "didConnectNotification" из socketDidConnectToHost(...) и в своем обработчике (отличном от 1) устраняет проблему с подключениеминдикатор ^.

Примечание: При первом появлении вашего viewController вы, вероятно, начнете с 2), так что нечего отклонять.

Вы можете найти множество примеров, связанных с NotificationCenter на SO: https://stackoverflow.com/a/24756761/5329717

В сценарии, где две вышеупомянутые операции независимы (то есть они могут происходить в любом порядке относительно друг друга), механизм GCD, который будет использоваться, будет DispatchGroup .Это несколько ближе к вашей попытке использовать семафор, однако вам он тоже не нужен , потому что ваши 2 события (отключение и подключение) зависят (т.е. их соответствующий порядок вхождения равен исправлено ).
Пример допустимого варианта использования DispatchGroup будет синхронизировать ответы многих запросов на выборку изображений, когда вам не важен их порядок прибытия (вы либо получаете всеиз них или не продолжайте).

...