Шаблон Singletons предоставляет глобально доступный общий экземпляр объекта.

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

Apple часто использует этот подход. Например: UIApplication.sharedApplication (), NSUserDefaults.standardUserDefaults (), NSFileManager.defaultManager () все возвращают объект Singleton.

В Objective-C, чтобы гарантировать создание только одного экземпляра одноэлементного объекта, его инициализация заключена в вызов функции dispatch_once, которая выполняет блок один раз и только один раз за время существования приложения. .

В Swift просто необходимо использовать свойство статического типа, которое гарантированно будет лениво инициализировано только один раз, даже при одновременном доступе через несколько потоков:

Вот и все ... ОДНОСТРОЧНЫЙ СИНГЛЕТОН!

Используется: Singleton.sharedInstance.

Поскольку все объекты поставляются с общедоступным инициализатором по умолчанию в Swift, нам нужно переопределить init и сделать его закрытым. Это гарантирует, что синглтон действительно уникален, и не позволяет внешним объектам создавать собственные экземпляры этого класса. Синглтон shoudl также должен быть окончательным, чтобы предотвратить его создание подкласса (если синглтону требуются дополнительные функции, его следует инкапсулировать в расширение). Итак, нам нужно добавить еще одну строку:

Это последняя правильная реализация синглтона.

Спасибо Майклу Ормонду за предложение «приватной инициализации».

Надеюсь, эта статья окажется для вас полезной. Спасибо за прочтение!