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 var
en iOS 10 para singletons (por ejemplo, UIApplication). ¿Su implementación sería la misma que esta?private
métodos ni siquierainternal
. Esto evita que otros usen el inicializador '()' predeterminado para esta clase.private
eninit
.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