Gewusst wie: zurücksetzen von singleton-Instanz?
Ich bin erstellen einer singleton-Instanz wie folgt
static let currentUser = User()
private override init() {
super.init()
//custom initialisation
}
Wie kann ich das zurücksetzen dieser Instanz oder wieder auf null?
- Fügen Sie eine Methode hinzu, die neu an den ursprünglichen Zustand.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstelle ich alle meine Singletons mit einem
optional
Singleton-Instanz.Allerdings habe ich das auch
private
und eine Funktion verwenden, um es zu Holen.Wenn das Singleton ist
nil
es erstellt eine neue Instanz.Dies ist eigentlich die einzige gute Möglichkeit dar, um ein Singleton. Wenn Sie ein reguläres Objekt, dass man nicht deinitialize es ist ein Speicher problem. Singletons sind nicht anders, außer, dass Sie eine Funktion schreiben, die es tun.
Singletons komplett selbst verwaltet. Dies bedeutet, dass von init deinit.
Habe ich ein paar Vorlagen auf github für Singeltons, eine davon mit einem vollständig implementiert lese - /Schreibzugriff zu sperren.
Können Sie nicht tun, wenn Sie erklären
currentUser
alslet
. Es solltevar
statt, oder besser nochprivate (set) var
. Auch Sie nicht zuordnen könnencurrentUser
mitnil
wenn der TypUser
(abgeleitet aus der Art und Weise ordnen Sie es im moment). Stattdessen sollte esUser?
.Beispielsweise so etwas wie dieses:
private (set)
ermöglicht änderungen an der Immobilie nur im Rahmen der aktuellen Datei, und für den rest des Codes es wird alslet
. Dann MethoderesetCurrentUser()
können verwendet werden, um es zunil
.Oder auch dieses:
Können Sie
currentUser
als berechnete Eigenschaft, die garantiert, um einen Wert zurückzugeben. So können Sie zurücksetzen der Benutzernil
, ja. Aber wenn Sie später versuchen zu Lesen, von dort aus wieder eine neue Instanz automatisch angelegt werden.Vorsichtig sein, mit Multithread-Zugang, aber.
Alles, was Sie wollen, ist möglich, aber höchst unrecommended 🙂 Da singletons durch das design nicht fallen, zurück auf null.
Zuerst, wenn Sie ändern möchten
currentUser
es mussvar
. Dann, wenn Sie wollen, dass es null ist, muss es durch optionale geben und sollten Sie es Auspacken, wenn mit.Ich würde vorschlagen nicht ändern
currentUser
oder machen Sie es nicht-statische (zum Beispiel, eine Eigenschaft, von einigenUsersManager
.Auch Sie können ändern Sie die Eigenschaften
currentUser
(wiename
,loggedIn
). Endlich, werfen Sie einen Blick auf diese Antwort: https://stackoverflow.com/a/28398974/326017 - beschreibt Sie Ihre situation.