Dans le document Utilisation de Swift avec Cocoa et Objective-C d' Apple (mis à jour pour Swift 3), ils donnent l'exemple suivant du modèle Singleton:
class Singleton {
static let sharedInstance: Singleton = {
let instance = Singleton()
// setup code
return instance
}()
}
Imaginons que ce singleton ait besoin de gérer un tableau variable de Strings. Comment / où déclarer cette propriété et m'assurer qu'elle est correctement initialisée dans un [String]
tableau vide ?
static let shared = Singleton()
static let shared: Singleton = Singleton()
place, vous pouvez simplement écrirestatic let shared = Singleton()
final class Singleton: NSObject { private override init() { } }
Vous pouvez initialiser un tableau vide comme celui-ci.
Ou si vous préférez une approche différente, celle-ci fera l'affaire.
la source
extension Cache { static let sharedInstance: Cache = { let instance = Cache() return instance }() }
class var
dans iOS 10 pour les singletons (par exemple UIApplication). Leur mise en œuvre serait-elle la même que celle-ci?private
méthodes même pasinternal
. Cela empêche les autres d'utiliser l'initialiseur par défaut '()' pour cette classe.private
dansinit
.Selon la documentation d'Apple: dans Swift, vous pouvez simplement utiliser une propriété de type statique, qui est garantie d'être initialisée paresseusement une seule fois, même en cas d'accès simultané sur plusieurs threads .
Avec la méthode d'initialisation:
la source
Toute initialisation serait effectuée dans une méthode init. Aucune différence ici entre un singleton et un non-singleton.
la source