Singletons en Swift

Swift es un lenguaje estático, por lo tanto para crear un singleton solamente hace falta declarar una constante estática dentro de la clase o estructura que se desea contenga un singleton:

struct Contact {}

class ContactsManager {
    static let shared = ContactsManager()
    
    func getContacts(completion: (([Contact]) -> Void)) {
        
    }
}

ContactsManager.shared.getContacts { (contacts) in
    print(contacts.count)
}

En este ejemplo, ContactsManager.shared siempre será el mismo objeto independientemente de donde sea usado.