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

Синглтон — это шаблон проектирования, который гарантирует, что класс может иметь только один объект. Следовательно, шаблон Singleton ограничивает класс только одним экземпляром.

Есть большая вероятность, что вы уже использовали шаблон Singleton в Swift. Следующие примеры могут выглядеть похожими, если вы работали с фреймворком Apple.

// Shared URL Session
let sharedURLSession = URLSession.shared

// Default File Manager
let defaultFileManager = FileManager.default

// Standard User Defaults
let standardUserDefaults = UserDefaults.standard

// Default Payment Queue
let defaultPaymentQueue = SKPaymentQueue.default()

Прежде чем двигаться дальше, важно знать роль static variables.

Статические переменные — это те переменные, значения которых являются общими для всех экземпляров или объектов класса. Когда мы определяем любую переменную как статическую, она привязывается к классу, а не к объекту.

Как реализовать класс Singleton?

Давайте создадим класс Singleton со статической переменной shared и функцией businessLogic, которая выполняет за нас какую-то задачу.

class Singleton {
    
    static let shared = Singleton()
    
    // yes, private init!!!
    private init() {}
    
    func businessLogic() {
        // some business logic
        print("Business Logic Successfully implemented")
    }
}

Обратите внимание, что мы использовали инициализатор private для init(). Теперь мы пишем код для использования Singleton.

Singleton.shared.businessLogic()

Вывод ожидаемый, он запускает функцию businessLogic. Мы видим Бизнес-логика успешно реализована, напечатанную в консоли.

Теперь давайте попробуем создать еще один экземпляр класса Singleton.

let anotherInstance = Singleton()

Xcode IDE сразу показывает ошибку:

Обратите внимание, что мы использовали инициализатор private для init() в нашем классе Singleton. Итак, если вы попытаетесь создать новый экземпляр класса Singleton, он выдаст ошибку. Следовательно, принцип Singleton pattern (только один экземпляр класса) проверен.

Плюсы одноэлементного паттерна

  1. Существует только один экземпляр класса, в этом мы можем быть уверены. Существует только один экземпляр класса, в этом мы можем быть уверены.
  2. Однократная инициализация

Минусы одноэлементного шаблона

  1. Объект singleton имеет глобальный доступ. Это означает, что к одноэлементному объекту можно получить доступ из любой точки проекта.
  2. Шаблон Singleton нарушает принцип единой ответственности

Если вы нашли эту статью полезной, пожалуйста, поделитесь этой историей, подпишитесь на меня в среде и поаплодируйте 👏. Спасибо!