Erstellen singleton von einem viewcontroller in swift 3
Ich weiß, wie man singleton-Klasse in swift. Die beste und einfache Möglichkeit zum erstellen von singleton-Klassen ist die folgende:
class Singleton {
static let sharedInstance = Singleton()
}
Aber ich brauche nicht singleton für jeden normalen Klasse. Ich brauche erstellen singleton für einen viewcontroller-Klasse. Also ich bin mit diesem code erstellen singleton
class AViewController:UIViewController {
static let sharedInstance = AViewController()
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
es gibt mir Fehler in der Nähe der AViewController()
Missing argument for parameter 'coder' in call
Wie es aussieht, wollen mich zu initialisieren mit init(coder: NSCoder)
. Aber was für parameter oder Wert sollte ich den pass durch die coder
?
- haben Sie überprüft, mit
class Singleton : NSObject
diese? - Warum hast du dann nicht den problematischen code in deiner Frage?
required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) }
- 'öffentlichen init?(coder aDecoder: NSCoder){ super.init(coder: aDecoder) }' Fügen Sie diese in Ihrem code
- Bitte sehen Sie meine aktuelle Frage.
- Ich bereits umgesetzt.
- Verwenden Sie storyboard?
- View-Controller sind in der Regel nicht gute Kandidaten für singletons. Wenn Sie wirklich wollen, dies zu tun, würden wir wahrscheinlich mehr wissen müssen, wie der view-Hierarchie für diese view-controller erstellt wird (eine Szene in einem storyboard? NIB? programmatisch erstellt?). Aber, wenn Sie interessiert sind, möchten Sie vielleicht, um zu erklären, warum Sie verwenden möchten, ein singleton, und wir könnten in der Lage sein, um Ihnen eine bessere Muster.
- Ja. Der viewcontroller im storyboard.
- 1) Warum möchten Sie ein singleton-view-controller? 2) poste Bitte mehr relevanten code. Haben Sie
init
Methoden? Zumindest zeigen die Signaturen. - Ich möchte an dieser viewcontroller als ein sidepanel. Und ja, die viewcontroller im storyboard. Die ich erstellt habe, singleton für viewcontroller in Objective C. Jetzt möchte ich es konvertieren zu swift.
- Ich habe eine
init
Methode. Finden Sie die aktualisierte Frage. - Wenn Sie bereits umgesetzt
required init
Methode, warum sind Sie dann fragt, welche parameter oder Wert sollte ich den pass durch die Programmierer? - Weil ich umgesetzt
init? (coder aDecoder: NSCoder)
und diese wollen mir zu übergeben Programmierer Wert. - Und diese Seitenwand sich, hat seine eigene Szene im storyboard? Und nur weil dieses ist ein side-panel, das nicht darauf hindeuten, dass ein singleton ist ein gutes Muster, auch wenn das, was Sie Taten, bevor...
- Mögliche Duplikate von Mit dem Swift Singleton
- Dein link erklärt nicht, Sie zu erstellen singleton aus viewcontroller. Entfernen Sie doppelte Flagge aus meine Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wirklich haben wollten singleton für einen view-controller entsprechend einige Szenen, die, würden Sie vermutlich so etwas wie:
In diesem Beispiel, das storyboard war
Main.storyboard
und das storyboard Bezeichner für die jeweilige Szene warFoo
. Offensichtlich ist, ersetzen Sie diese Werte für das, was war in Ihrem Fall geeignete.Dann Ihre anderen view-controller das war diesen Aufruf könnte so etwas machen:
Ich würde nicht empfehlen, singletons für view-Controller. View-Controller (und deren Ansichten) angelegt werden sollen, wenn nötig und erlaubt zu werden freigegeben, wenn Sie sind entlassen. Und Sie verlieren viele storyboard-Vorteile (von der Sie den logischen Fluss zwischen den Szenen mit leitet über zwischen Ihnen). Und wenn Sie mit dieser view-controller in unterschiedlichen Kontexten, Sie sind Einladend Problemen, die aus der view-controller Hierarchie fallen out of sync mit der view-Hierarchie. Ich würde wirklich raten Ihnen von der Verwendung von singletons für view-Controller.
Aber wenn Sie es tun, Sie könnten etwas wie, dass...
UITabBarController
. Sollte ichsingleton
? oder einzelne instace für jeden zu empfehlen wäre? Bitte teilen Sie Ihren Vorschlag für diesen Fall.Versuchen zu tun:
AppDelegate:
Fügen Sie eine Referenz zu der ViewController, so dass Sie zugreifen können es weltweit, etwa so:
AnotherViewController (Nutzung):
Nun können Sie den Zugang über "AppDelegate", etwa so:
Hoffe, dass dies geholfen.