Saltar al contenido

Cuándo usar static constante y variable en Swift?

Después de tanto trabajar ya hallamos la contestación de esta pregunta que muchos usuarios de nuestro sitio web han presentado. Si quieres aportar algún detalle puedes aportar tu información.

Solución:

Cuando defines un static var/let en una clase (o estructura), esa información se compartirá entre todas las instancias (o valores).

Compartiendo información

class Animal 
    static var nums = 0

    init() 
        Animal.nums += 1
    


let dog = Animal()
Animal.nums // 1
let cat = Animal()
Animal.nums // 2

Como puede ver aquí, creé 2 instancias separadas de Animal pero ambos comparten lo mismo static variable nums.

único

A menudo un static constante se utiliza para adoptar el patrón Singleton. En este caso, no queremos que se asigne más de 1 instancia de una clase. Para hacer eso, guardamos la referencia a la instancia compartida dentro de una constante y ocultamos el inicializador.

class Singleton 
    static let sharedInstance = Singleton()

    private init()  

    func doSomething()  

Ahora cuando necesitamos el Singleton instancia escribimos

Singleton.sharedInstance.doSomething()
Singleton.sharedInstance.doSomething()
Singleton.sharedInstance.doSomething()

Este enfoque nos permite usar siempre la misma instancia, incluso en diferentes puntos de la aplicación.

Hay algunas publicaciones sobre cómo escribir código para static constante y static variable en Swift. Pero no está claro cuándo usar static constante y static variable en lugar de constante y variable. ¿Alguien puede explicar? Cuando defines un static var/let en una clase (o estructura), ese valor se compartirá entre todas las instancias (o valores).

static Las variables/clase son variables a las que se puede acceder sin necesidad de crear ninguna instancia/objeto.

class Human 
    static let numberOfEyes = 2 //human have only 2 eyes
    static var eyeDefect = false //whether human have side-effect or not. he can have defect later so its variable

    //other variables and functions


//you can access numberOfEyes like below no object of Human is created
print(Human.numberOfEyes)
print(Human.eyeDefect)

//Object of Human
let john = Human()

Creo que sabes la diferencia entre constante y variable. En resumen, constante es aquello cuyo valor nunca cambia; numberOfEyes en el ejemplo anterior y la variable es aquella cuyo valor cambia; eyeDefect en el ejemplo anterior.

static Las constantes o variables se colocan en la memoria (RAM) separadas de los objetos. es decir, numberOfEyes tiene asignado un espacio de memoria diferente al del objeto John, no está dentro de John.

ahora, cuando usar static constantes/variables:

  1. Cuando usa un patrón de diseño singleton: static let sharedInstance = APIManager()

    class APIManager()
        static let sharedInstance = APIManager()
        //Your other variables/functions here below
    
    //Use it as to get singleton instance of APIManager from anywhere in your application
    let instanceOfAPIManager = APIManager.sharedInstance
    
  2. Cuando necesita el valor de cualquier cosa que sea globalmente igual sin necesidad de crear una instancia de la clase bajo la cual se define como numberOfEyes en la clase humana.

  3. Uso de static las variables/constantes no son muy recomendables debido a problemas de memoria porque una vez que se instancian/asignan, permanecen en la memoria hasta que su aplicación se elimine de la memoria. He encontrado hasta ahora el mejor lugar para usar static las variables/constantes son solo mientras se crea un patrón único y, a veces, los punteros para otras variables y constantes normales no se usan static porque: problema de memoria, será difícil ejecutar pruebas unitarias en su código con static variables/constantes. No se recomienda usar como similar en la clase Human también. en su lugar, utilícelos como constantes o variables y acceda a ellos creando una instancia.

    class Human 
     let numberOfEyes = 2 //human have only 2 eyes
     var eyeDefect = false //whether human have side-effect or not. he can have defect later so its variable
    
       //other variables and functions
     
    
    //you can access numberOfEyes like below if you need just those values.
    print(Human().numberOfEyes)
    print(Human().eyeDefect)
    

Las constantes y variables estáticas pertenecen a la clase en sí, no a una instancia en particular. Una clase también puede tener static métodos que se pueden llamar sin crear una instancia de una clase.

Así que cuando tienes una clase MyClass con un static variable xtambién puedes acceder a él a través de MyClass.x directamente. x se compartirá entre todas las instancias de una clase

Comentarios y calificaciones del post

Recuerda que tienes la opción de parafrasear si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *