Как разработчику iOS, бывают случаи, когда нам нужно работать без доступа к Интернету. Существует отличная сторонняя библиотека ReachabilitySwift, которая помогает нам выполнять всю базовую работу и предоставляет простые в использовании API.

Однако нелогично создавать новый Reachability экземпляр и вызывать startNotifier(), чтобы использовать его всякий раз, когда у нас есть объект, который должен определять состояние Интернета.

В настоящее время мы хотим выполнить однократную настройку и позволить нескольким экземплярам проверять подключение к Интернету. В этом сценарии можно решить проблему, комбинируя шаблон Singleton и шаблон многоадресного делегата. Взгляните на иллюстрацию ниже, и вы быстро поймете.

Вы можете увидеть полный исходный код здесь. Или, если вы хотите использовать его напрямую, просто установите его через Cocoapods.

Шаблон многоадресного делегата

Этот шаблон подходит для создания отношений делегатов "один ко многим".

Ключ к этому шаблону заключается в том, как:

  • Используйте дженерики, чтобы принять ваш протокол делегата (ConnectionListener), и создайте экземпляр DelegateWrapper с AnyObject.
  • управлять своими делегатами: addDelegate() и removeDelegate() с удостоверением (===).
  • уведомить ваших делегатов: invokeDelegates() с помощью цикла for.

Куда пойти отсюда

Теперь вы понимаете концепцию шаблона многоадресного делегирования. Если вы хотите узнать больше о шаблонах дизайна, я рекомендую вам взглянуть на: