Singleton со свойствами в Swift 3

В документе Apple с использованием Swift с документом Cocoa и Objective-C (обновленном для Swift 3) они приводят следующий пример шаблона Singleton:

class Singleton { static let sharedInstance: Singleton = { let instance = Singleton() // setup code return instance }() } 

Представим себе, что этот синглтон должен управлять переменным массивом строк. Как / где я могу объявить это свойство и убедиться, что он правильно инициализирован пустым массивом [String] ?

Для меня это лучший способ, сделайте init приватным. Синтаксис Swift 3/4

 // MARK: - Singleton final class Singleton { // Can't init is singleton private init() { } // MARK: Shared Instance static let shared = Singleton() // MARK: Local Variable var emptyStringArray = [String]() } 

Вы можете инициализировать пустой массив, подобный этому.

 class Singleton { //MARK: Shared Instance static let sharedInstance : Singleton = { let instance = Singleton(array: []) return instance }() //MARK: Local Variable var emptyStringArray : [String] //MARK: Init init( array : [String]) { emptyStringArray = array } } 

Или, если вы предпочитаете другой подход, этот будет хорошо.

 class Singleton { //MARK: Shared Instance static let sharedInstance : Singleton = { let instance = Singleton() return instance }() //MARK: Local Variable var emptyStringArray : [String]? = nil //MARK: Init convenience init() { self.init(array : []) } //MARK: Init Array init( array : [String]) { emptyStringArray = array } } 

Согласно документации Apple: в Swift вы можете просто использовать свойство статического типа, которое гарантированно будет инициализироваться только один раз, даже если доступно одновременное обращение к нескольким streamам .

 class Singleton { // MARK: - Shared Instance static let sharedInstance = Singleton() } 

Или, с помощью метода инициализации:

 class Singleton: NSObject { // MARK: - Shared Instance static let sharedInstance: Singleton = { let instance = Singleton() // setup code return instance }() // MARK: - Initialization Method override init() { super.init() } } 

Любая инициализация будет выполняться в методе init. Здесь нет никакой разницы между синглтоном и не одиночным.

  • Доступ к коду в Swift 3 Error
  • Держите окно всегда сверху?
  • Перенаправить NSLog в файл в Swift не работает
  • Как инициализировать структуру из объекта json
  • Правильно Разбор JSON в Swift 3
  • Как остановить DispatchWorkItem в GCD?
  • Shuffle array swift 3
  • Почему «nil» не совместим с «UnsafePointer » в Swift 3?
  • Операторы «++» и «-» устарели Xcode 7.3
  • Что является хорошим примером для различения fileprivate и private в Swift3
  • «Classname не имеет имени участника» при добавлении цели UIButton
  • Давайте будем гением компьютера.