No documento Using Swift with Cocoa e Objective-C da Apple (atualizado para o Swift 3), eles fornecem o seguinte exemplo do padrão Singleton:
class Singleton {
static let sharedInstance: Singleton = {
let instance = Singleton()
// setup code
return instance
}()
}
Vamos imaginar que este singleton precisa gerenciar um array variável de Strings. Como / onde eu declararia essa propriedade e garantir que ela seja inicializada corretamente em uma [String]
matriz vazia ?
static let shared = Singleton()
static let shared: Singleton = Singleton()
basta escreverstatic let shared = Singleton()
final class Singleton: NSObject { private override init() { } }
Você pode inicializar um array vazio como este.
Ou se você preferir uma abordagem diferente, esta será adequada.
fonte
extension Cache { static let sharedInstance: Cache = { let instance = Cache() return instance }() }
class var
no iOS 10 para singletons (por exemplo, UIApplication). A implementação deles seria igual a esta?private
métodos nem mesmointernal
. Isso evita que outros usem o inicializador padrão '()' para esta classe.private
eminit
.De acordo com a documentação da apple: No Swift, você pode simplesmente usar uma propriedade de tipo estático, que tem a garantia de ser inicializada lentamente apenas uma vez, mesmo quando acessada através de vários threads simultaneamente .
Com método de inicialização:
fonte
Qualquer inicialização seria feita em um método init. Nenhuma diferença aqui entre um singleton e um não singleton.
fonte