Использование Swift Singleton
У меня есть следующий класс Singleton:
class Singleton {
static let sharedInstance = Singleton()
}
Я могу найти очень мало онлайн о том, как использовать многочисленные быстрые реализации шаблона Singleton. Я использовал его ранее в Objective-C в предыдущем приложении, но мне это показалось намного более простым.
Например, если бы я хотел создать массив пользовательских объектов, которые можно было бы использовать в любом месте приложения, как бы я его объявил и как бы это реализовал. В моем классе Синглтона target-C я создаю глобальные переменные в файле класса, а затем реализую его следующим образом:
singletonClass *mySingleton = [singletonClass sharedsingletonClass];
mySingleton.whatever = "blaaaah"
Я ценю помощь! Также я новичок здесь и новичок в Swift.
1 ответ
Существует много информации о синглетах в Swift. Вы сталкивались с этой статьей со своим мастерством Google? http://krakendev.io/blog/the-right-way-to-write-a-singleton
Но чтобы ответить на ваш вопрос, вы можете просто определить все, что вы хотите использовать в обычном режиме.
class Singleton {
static let sharedInstance = Singleton() // this makes singletons easy in Swift
var stringArray = [String]()
}
let sharedSingleton = Singleton.sharedInstance
sharedSingleton.stringArray.append("blaaaah") // ["blaaaah"]
let anotherReferenceToSharedSingleton = Singleton.sharedInstance
print(anotherReferenceToSharedSingleton.stringArray) // "["blaaaah"]\n"
Согласитесь с Andrew Sowers. Просто помните, что вы также должны объявить приватный инициализатор, например так:
class Singleton: NSObject {
static let sharedInstance = Singleton()
private override init() {}
}
Без этого закрытого init() другие объекты могли бы создать свой собственный экземпляр:
let mySingleton = Singleton()
Теперь есть два экземпляра, Singleton.sharedInstance и mySingleton - больше не одиночка! Я обнаружил это через неприятную ошибку, когда несколько "синглетонов" запускали таймеры и наносили ущерб.