¿Cuál es el uso de la palabra clave "estática" si se usa la palabra clave "let" para definir constantes/inmutables en swift?
static constants (5)
Estoy un poco confundido sobre el uso de palabras clave estáticas en swift. Como sabemos rápido introduce let palabra clave para declarar objetos inmutables. Como declarar la identificación de una celda de vista de tabla que muy probablemente no cambiará durante su vida útil. Ahora, ¿cuál es el uso de la palabra clave estática en alguna declaración de estructura como:
struct classConstants
{
static let test = "test"
static var totalCount = 0
}
mientras que la palabra clave hace lo mismo. En el objetivo C usamos estática para declarar alguna constante como
static NSString *cellIdentifier=@"cellId";
Además, lo que me hace más curioso es el uso de la palabra clave estática junto con let y también la palabra clave var . ¿Alguien puede explicarme dónde usar esta palabra clave estática? Más importante aún, ¿realmente necesitamos estática en poco tiempo?
Las variables estáticas pertenecen a un tipo en lugar de a una instancia de clase. Puede acceder a la variable estática usando el nombre completo del tipo.
Código:
class IOS {
var iosStoredTypeProperty = "iOS Developer"
static var swiftStoredTypeProperty = "Swift Developer"
}
//Access the iosStoredTypeProperty by way of creating instance of IOS Class
let iOSObj = IOS()
print(iOSObj.iosStoredTypeProperty) // iOS Developer
//print(iOSObj.swiftStoredTypeProperty)
//Xcode shows the error
//"static member ''swiftStoredTypeProperty'' cannot be used on instance of type IOS”
//You can access the static property by using full name of the type
print(IOS.swiftStoredTypeProperty) // Swift Developer
Espero que esto te ayude..
Los desglosaré por ti:
-
var
: utilizado para crear una variable -
let
: utilizado para crear una constante -
static
: se usa para crear propiedades de tipo conlet
ovar
. Estos se comparten entre todos los objetos de una clase.
Ahora puedes combinar para obtener el resultado deseado:
-
static let key = "API_KEY"
: escriba la propiedad que es constante -
static var cnt = 0
: propiedad de tipo que es una variable -
let id = 0
: constante (puede asignarse solo una vez, pero puede asignarse en tiempo de ejecución) -
var price = 0
: variable
Entonces, para resumir todo, var y dejar definir la mutabilidad mientras estático y la falta de definir alcance. Puede utilizar static var
para realizar un seguimiento de la cantidad de instancias que ha creado, mientras que es posible que desee utilizar solo var
para un precio que es diferente de un objeto a otro. Espero que esto aclare las cosas un poco.
Código de ejemplo:
class MyClass{
static let typeProperty = "API_KEY"
static var instancesOfMyClass = 0
var price = 9.99
let id = 5
}
let obj = MyClass()
obj.price // 9.99
obj.id // 5
MyClass.typeProperty // "API_KEY"
MyClass.instancesOfMyClass // 0
Una variable estática se comparte a través de todas las instancias de una clase. Lanza este ejemplo en el patio de recreo:
class Vehicle {
var car = "Lexus"
static var suv = "Jeep"
}
// changing nonstatic variable
Vehicle().car // Lexus
Vehicle().car = "Mercedes"
Vehicle().car // Lexus
// changing static variable
Vehicle.suv // Jeep
Vehicle.suv = "Hummer"
Vehicle.suv // Hummer
Cuando cambia la variable para la propiedad estática, esa propiedad ahora se cambia en todas las instancias futuras.
para ver la diferencia entre las propiedades de tipo y / o los métodos y las propiedades y / o métodos de clase, consulte este ejemplo autoexplicativo de Apple Docs.
class SomeClass {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
return 27
}
class var overrideableComputedTypeProperty: Int {
return 107
}
}
Las propiedades estáticas solo pueden declararse en tipo, no globalmente. En otras palabras, propiedad estática === propiedad de tipo en Swift. Para declarar propiedad de tipo, debe usar palabra clave estática.
"La palabra clave let define una constante" es confuso para los principiantes que provienen de C # background (como yo). En términos de C #, puede pensar en "dejar" como variable de "solo lectura" .
(respuesta a ¿Cómo funciona exactamente la palabra clave "let" en Swift? )
Usa ambos static
y let
para definir constante
public static let pi = 3.1416 // swift
public const double pi = 3.1416; // C#
public static final double pi = 3.1416 // Java
Cada vez que uso let
para definir constant, parece que estoy usando readonly
de C #. Por lo tanto, uso tanto static
como let
para definir constante en swift.