2016-03-22 3 views
0

Ich arbeite an RealmSwift, die eine moderne Datenbank Ersatz von CoreData/SQLite in Swift ist.Entwurfsmuster für Realm Datenbank Swift 3.1 - Singleton

Ich frage mich, wie ein Entwurf für ein Class zu implementieren, die verwalten/behandeln alle Anfragen für RealmSwift Framework

Diese Frage ist etwas ähnlich SQLite Model Manager zur Umsetzung aber für RealmSwift.

Insbesondere brauche ich keine singleton Objekt/Instanz oben erwähnt.

+0

Der TL; DR für dieses Duplikat ist [eine Dispatch \ _once Singletons verwenden Modell in Swift] (http://stackoverflow.com/questions/24024549/using-a-dispatch-once-singleton-model-in-swift) Das Endergebnis ist, was TiM sagte. –

Antwort

7

Realm ein ziemlich cleveres internes Caching-System hat, wo frühere Instanzen Realm gehalten werden auf und jedes Mal einen Anruf recycelt wie let realm = try! Realm() tritt auf. Als solches ist es nicht wirklich notwendig, und es wird nicht empfohlen, eine Realm Instanz selbst in ein Singleton zu integrieren.

Wenn Sie die Einstellungen Ihrer Realm Instanz stark anpassen möchten, tun Sie dies normalerweise über ein Realm Configuration Objekt, das statisch und threadsicher ist. Wenn dies der Fall ist, wäre es angemessener, eine Singleton-Methode (oder auch nur eine statische Klassenmethode) zu verwenden, die das entsprechende Configuration-Objekt zurückgibt, wenn Sie eine neue Realm-Instanz erstellen müssen.

that thing in swift hat eine Seite auf, wie Singletons in Swift zu schaffen, und es ist im Grunde nur eine einzige statische Eigenschaft einer Klasse Umsetzung:

class SomeManager { 
    static let sharedInstance = SomeManager() 
} 
+0

Auch private init() wird empfohlen, um mehrere Instanziierungen Ihrer SomeManager-Klasse zu beschränken. Sonst ist deine Klasse kein echtes Singleton. – Whirlwind

+0

@TiM Ich benötige eine Implementierungsidee für eine Verwaltungsklasse, die für die Bearbeitung aller Fragen im Zusammenhang mit Realm verwendet wird –

1

Verwenden Sie eine Enumeration mit einem Fall:

enum Singleton: Protocols { 
    case instance 
    /// methods 
} 

gebraucht wie:

Singleton.instance.method(args)