Шаблон Singletons предоставляет глобально доступный общий экземпляр объекта.
В большинстве случаев синглтон в iOS не нужен (этим можно злоупотреблять для формирования плохо сконструированного кода), но в некоторых случаях имеет смысл иметь только один экземпляр класса. .
Apple часто использует этот подход. Например: UIApplication.sharedApplication (), NSUserDefaults.standardUserDefaults (), NSFileManager.defaultManager () все возвращают объект Singleton.
В Objective-C, чтобы гарантировать создание только одного экземпляра одноэлементного объекта, его инициализация заключена в вызов функции dispatch_once, которая выполняет блок один раз и только один раз за время существования приложения. .
В Swift просто необходимо использовать свойство статического типа, которое гарантированно будет лениво инициализировано только один раз, даже при одновременном доступе через несколько потоков:
Вот и все ... ОДНОСТРОЧНЫЙ СИНГЛЕТОН!
Используется: Singleton.sharedInstance.
Поскольку все объекты поставляются с общедоступным инициализатором по умолчанию в Swift, нам нужно переопределить init и сделать его закрытым. Это гарантирует, что синглтон действительно уникален, и не позволяет внешним объектам создавать собственные экземпляры этого класса. Синглтон shoudl также должен быть окончательным, чтобы предотвратить его создание подкласса (если синглтону требуются дополнительные функции, его следует инкапсулировать в расширение). Итак, нам нужно добавить еще одну строку:
Это последняя правильная реализация синглтона.
Спасибо Майклу Ормонду за предложение «приватной инициализации».
Надеюсь, эта статья окажется для вас полезной. Спасибо за прочтение!