example create ios swift singleton

ios - create - Cómo crear objetos Singleton en swift



singleton swift 4 (4)

Estoy aprendiendo sobre el patrón de Singleton de forma rápida y eficiente para crear una clase de Singleton y descubrí la mejor manera de crear como se muestra a continuación.

class SingletonClass{ static let sharedInstance = SingletonClass() }

Ya que uso la instrucción let , es de solo lectura y debe ser seguro para subprocesos, por lo que no hay necesidad de dispatch_once () desde Objective C. Y static se usa para hacer que la variable sharedInstance sea ​​una variable de class , supongo.

Pero, ¿cómo garantiza esto que solo se crea una instancia a lo largo de la aplicación? ¿Hay algo que me esté perdiendo?


Hacer inicio privado, por ejemplo:

final class Singleton { // Can''t init is singleton private init() { } //MARK: Shared Instance static let sharedInstance: Singleton = Singleton() //MARK: Local Variable var emptyStringArray : [String] = [] }


Lo que garantiza que solo se crea una vez es la palabra clave static . puede consultar este artículo: https://thatthinginswift.com/singletons/

Espero que ayude.

La palabra clave estática denota que se puede acceder a una variable o método miembro sin requerir una instanciación de la clase a la que pertenece. En términos simples, significa que puede llamar a un método, incluso si nunca ha creado el objeto al que pertenece


Si desea evitar la creación de instancias de su clase (restringiendo efectivamente el uso a solo el singleton), entonces marque su inicializador como private :

class SingletonClass { static let shared = SingletonClass() private init() { // initializer code here } }


Tienes razón. Y es posible que desee leer Archivos e Inicialización acerca de cómo se manejan las variables globales y estáticas en Swift

Rápido usar este enfoque

Inicialice perezosamente, ejecute el inicializador para un global la primera vez que se haga referencia, similar a Java.

Dice

permite inicializadores personalizados, tiempo de inicio en Swift escala limpiamente sin inicializadores globales para frenarlo, y el orden de ejecución es completamente predecible.

El inicializador perezoso para una variable global (también para miembros estáticos de estructuras y enumeraciones) se ejecuta la primera vez que se accede a global, y se inicia como dispatch_once para asegurarse de que la inicialización sea atómica. Esto permite una manera fresca de usar dispatch_once en su código: simplemente declare una variable global con un inicializador y márquela como privada.