2017-05-31 4 views
0

Ich arbeite derzeit an einem Spiel mit Swift und Spritekit. Ich habe eine Klasse namens Utilities, die eine Reihe von generischen Funktionen hat, die rund um das Spiel verwendet werden. Ich erstelle derzeit eine neue Instanz der Klasse Utilities in meiner einzigen Spielszene, und dann die Verweise passiert obwohl auf andere Klassen wie soswift effizient Klassen wiederverwenden

self.util = Utilities() 
self.player = Player(util: self.util) 
self.monster = Monster(util: self.util) 

ich das tue, so dass ich nur eine Instanz der Klasse erstellen, Aber je mehr ich gehe, desto mehr will ich eine neue Instanz von Utilities in jeder Klasse machen, in der ich sie brauche. Gibt es da einen Nachteil? Ist es effizienter, nur die eine Instanz zu erstellen und weiterzugeben, oder wird es keinen Unterschied machen, wenn ich 5 oder 6 Instanzen sage?

+0

Warum müssen Sie die 'Utilities' Klasse instanziieren? Sie können nur Funktionen auf Klassenebene in dieser Datei behalten und sie von wo immer Sie wollen aufrufen. –

+0

Swift ist nicht Java. Sie benötigen keine Klasse, um generische Funktionalität zu umbrechen. Sie können sie einfach als globale Funktionen haben. (Ich denke) – hasen

Antwort

3

Im Idealfall sollten Sie Ihre Dienstprogramme-Klasse nicht instanziieren müssen. Sie können öffentliche Funktionen darin schreiben und diese Methoden von wo immer Sie möchten aufrufen.

Wenn Sie Ihre Klasse instanziieren und eine einzelne Instanz behalten möchten, sollten Sie sich für Singleton entscheiden. Sie können eine Singleton wie

class Utilities { 
    static let sharedInstance = Utilities() 
} 

und Sie die Instanz durch Aufruf Utilities.sharedInstance

+1

Ohhhhhhhh ich Gotcha. Ich bin zu swift noch ziemlich neu, aber das Hinzufügen des statischen Schlüsselwortes erlaubt mir, 'Utilities.whatever()' zu verwenden, was ich will. Danke für die Klarstellung! –

+1

Hier ist ein Beitrag, der ausführlich auf dieses Thema eingeht. http://krakendev.io/blog/the-right-way-to-write-a-singleton – Adrian