2016-03-22 1 views
0

Je travaille sur RealmSwift, qui est un remplacement de base de données moderne de CoreData/SQLite dans Swift.Modèle de conception pour la base de données de domaine Swift 3.1 - Singleton

Je me demande comment mettre en œuvre une conception pour une Class qui peut gérer/gérer toutes les requêtes pour RealmSwift Framework

Cette question est un peu similaire à la mise en œuvre du modèle Gestionnaire SQLite mais pour RealmSwift.

Plus précisément, je n'ai pas besoin d'un objet singleton/instance mentionné ci-dessus.

+0

Le TL; DR en double pour c'est [l'aide d'une dépêche \ _once singleton modèle dans Swift] (http://stackoverflow.com/questions/24024549/using-a-dispatch-once-singleton-model-in-swift) La ligne du bas est ce que TiM a dit. –

Répondre

7

Royaume dispose d'un système de cache interne plutôt intelligent où des cas précédents de Realm sont tenues sur et recyclées chaque fois un appel comme let realm = try! Realm() se produit. En tant que tel, il n'est pas vraiment nécessaire, ni recommandé d'essayer d'incorporer une instance Realm elle-même dans un singleton.

Si vous souhaitez personnaliser fortement les paramètres de votre instance Realm, vous le ferez normalement via un objet Realm Configuration, qui est statique et thread-safe. Si c'est le cas, il serait plus approprié d'avoir un singleton (ou même simplement une méthode de classe statique) qui renvoie l'objet Configuration approprié lorsque vous devez créer une nouvelle instance Realm.

that thing in swift a une page sur la façon de créer singletons à Swift, et il est essentiellement une seule propriété statique d'une implémentation de la classe:

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

Il est également recommandé d'init() privé privé pour limiter plusieurs instanciations de votre classe SomeManager. Sinon, votre classe n'est pas un vrai singleton. – Whirlwind

+0

@TiM J'ai besoin d'une idée de mise en œuvre pour une classe de gestion qui sera utilisée pour gérer toutes les requêtes liées au domaine –

1

Utilisez un ENUM avec un cas:

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

Utilisé comme:

Singleton.instance.method(args)