In Apples Dokument " Verwenden von Swift mit Kakao und Objective-C" (aktualisiert für Swift 3) wird das folgende Beispiel für das Singleton-Muster angegeben:
class Singleton {
static let sharedInstance: Singleton = {
let instance = Singleton()
// setup code
return instance
}()
}
Stellen wir uns vor, dieser Singleton muss ein variables Array von Strings verwalten. Wie / wo würde ich diese Eigenschaft deklarieren und sicherstellen, dass sie ordnungsgemäß in einem leeren [String]
Array initialisiert wird ?
static let shared = Singleton()
static let shared: Singleton = Singleton()
stattdessen können Sie einfach schreibenstatic let shared = Singleton()
final class Singleton: NSObject { private override init() { } }
Sie können ein leeres Array wie folgt initialisieren.
Oder wenn Sie einen anderen Ansatz bevorzugen, ist dieser gut geeignet.
quelle
extension Cache { static let sharedInstance: Cache = { let instance = Cache() return instance }() }
class var
in iOS 10 für Singletons verwendet (zB UIApplication). Wäre ihre Implementierung dieselbe?private
Methoden nicht einmalinternal
. Dies verhindert, dass andere Benutzer den Standardinitialisierer '()' für diese Klasse verwenden.private
In hinzufügeninit
.Gemäß der Apple-Dokumentation: In Swift können Sie einfach eine statische Typ-Eigenschaft verwenden, die garantiert nur einmal träge initialisiert wird, selbst wenn über mehrere Threads gleichzeitig zugegriffen wird .
Mit Initialisierungsmethode:
quelle
Jede Initialisierung würde in einer Init-Methode erfolgen. Kein Unterschied zwischen einem Singleton und einem Nicht-Singleton.
quelle