'Swift Singleton Pattern in Conjunction With Cloud Firestore

I have been looking into cloud firestore as my backend infrastructure. Ive been using realtime database but feel the switch is vital. I have looked at the firebase documentation and I am considering using a singleton pattern to manage the data transactions, however I am unsure the ramifications as there is little mention that I could find online. Is there any information on best practice design patterns in conjunction of cloud firestore.



Solution 1:[1]

It's quite a late answer but that's how I am using Firestore with a singleton pattern... hoping it helps others...

struct RemoteConfigManager {
    
    static var sharedDB = RemoteConfigManager()
    
    let db = Firestore.firestore() //FIRFirestore
    
    var listener : ListenerRegistration?
    
    private init(){}
    
    mutating func getData(){
        listener = db.collection("myCollection").addSnapshotListener { (snapshot, err) in
            if let err = err {
                print("Error getting documents: \(err)")
            } else {
                for document in snapshot!.documents {
                    let myValue = document.get("myKey") as! Bool
                   //other stuff 
                }
            }
        }
        
        
    }

     func detachListener(){
        listener?.remove()
      }

    }

The following code shows how to use this struct...

    //instance for FireStore
    var db : RemoteConfigManager?  

    //use this method after configring the GoogleService.plist file
    func firebaseRemoteConfig() {
        db = RemoteConfigManager.sharedDB
        db?.getData()
    }

call the following line when detachListener

 db?.detachListener()

I am detaching on applicationWillTerminate method of AppDelegate.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1