Семафоры кажутся слишком низким уровнем для вашего случая, если вы не делаете это в образовательных целях.
Использование NotificationCenter вместо:
1) Опубликовать "didDisconnectNotification" (произвольное имя строки) из socketDidDisconnect(...)
и в его соответствующий обработчик обновляет пользовательский интерфейс viewController, указывая пользователю на проблему с подключением.
2) Публикует "didConnectNotification" из socketDidConnectToHost(...)
и в своем обработчике (отличном от 1) устраняет проблему с подключениеминдикатор ^.
Примечание: При первом появлении вашего viewController вы, вероятно, начнете с 2), так что нечего отклонять.
Вы можете найти множество примеров, связанных с NotificationCenter
на SO: https://stackoverflow.com/a/24756761/5329717
В сценарии, где две вышеупомянутые операции независимы (то есть они могут происходить в любом порядке относительно друг друга), механизм GCD, который будет использоваться, будет DispatchGroup .Это несколько ближе к вашей попытке использовать семафор, однако вам он тоже не нужен , потому что ваши 2 события (отключение и подключение) зависят (т.е. их соответствующий порядок вхождения равен исправлено ).
Пример допустимого варианта использования DispatchGroup будет синхронизировать ответы многих запросов на выборку изображений, когда вам не важен их порядок прибытия (вы либо получаете всеиз них или не продолжайте).