En el documento Uso de Swift con Cocoa y Objective-C de Apple (actualizado para Swift 3), dan el siguiente ejemplo del patrón Singleton:
class Singleton {
static let sharedInstance: Singleton = {
let instance = Singleton()
// setup code
return instance
}()
}
Imaginemos que este singleton necesita administrar una matriz variable de cadenas. ¿Cómo / dónde declararía esa propiedad y me aseguraré de que se inicialice correctamente en una [String]matriz vacía ?

static let shared = Singleton()static let shared: Singleton = Singleton()en su lugar, solo puedes escribirstatic let shared = Singleton()final class Singleton: NSObject { private override init() { } }Puede inicializar una matriz vacía como esta.
O si prefiere un enfoque diferente, este funcionará bien.
fuente
extension Cache { static let sharedInstance: Cache = { let instance = Cache() return instance }() }class varen iOS 10 para singletons (por ejemplo, UIApplication). ¿Su implementación sería la misma que esta?privatemétodos ni siquierainternal. Esto evita que otros usen el inicializador '()' predeterminado para esta clase.privateeninit.Según la documentación de Apple: en Swift, simplemente puede usar una propiedad de tipo estático, que se garantiza que se inicializará perezosamente solo una vez, incluso cuando se accede a través de varios subprocesos simultáneamente .
Con método de inicialización:
fuente
Cualquier inicialización se haría en un método init. No hay diferencia aquí entre un singleton y un non-singleton.
fuente