Je suis un peu confus quant à l'utilisation de statique mot-clé dans Swift. Comme nous le savons, Swift introduit le mot-clé let pour déclarer des objets immuables. De la même manière que la déclaration de l'id d'une cellule de vue tabulaire qui ne changera probablement pas de son vivant. Maintenant est l'utilisation de statique mot clé dans une déclaration de struct comme:
struct classConstants
{
static let test = "test"
static var totalCount = 0
}
tandis que let mot-clé fait la même chose. En Objective C, nous avons utilisé static pour déclarer une constante comme
static NSString *cellIdentifier=@"cellId";
En outre, ce qui me rend plus curieux est l’utilisation du mot-clé statique avec le mot-clé let et aussi var. Quelqu'un peut-il m'expliquer où utiliser ce mot clé statique? Plus important encore avons-nous vraiment besoin de statique en rapide?
Je vais les décomposer pour vous:
var
: utilisé pour créer une variablelet
: utilisé pour créer une constantestatic
: utilisé pour créer propriétés du type avec let
ou var
. Ceux-ci sont partagés entre tous les objets d'une classe.Maintenant, vous pouvez combiner pour obtenir le résultat souhaité:
static let key = "API_KEY"
: propriété de type constantestatic var cnt = 0
: propriété de type qui est une variablelet id = 0
: constante (ne peut être affecté qu'une seule fois, mais peut l'être lors de l'exécution)var price = 0
: variableDonc, pour résumer le tout et laisser définir la mutabilité tout en statique et manque de définition. Vous pouvez utiliser static var
pour garder trace du nombre d'instances que vous avez créées, alors que vous pouvez utiliser uniquement var
pour un prix différent d'objet à objet. J'espère que cela clarifie un peu les choses.
Exemple de code:
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
Une variable statique est partagée par toutes les instances d'une classe. Jetons cet exemple dans la plaine de jeux:
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
Lorsque vous modifiez la variable pour la propriété statique, cette propriété est maintenant modifiée dans toutes les instances futures.
Les variables statiques appartiennent à un type plutôt qu'à une instance de classe. Vous pouvez accéder à la variable statique en utilisant le nom complet du type.
Code:
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
J'espère que cela vous aide ..
pour voir la différence entre les propriétés de type et/ou les méthodes et les propriétés de classe et/ou les méthodes, veuillez consulter cet exemple explicite de Apple docs
class SomeClass {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
return 27
}
class var overrideableComputedTypeProperty: Int {
return 107
}
}
Les propriétés statiques ne peuvent être déclarées que sur le type, pas globalement. En d'autres termes, propriété statique ===, propriété de type dans Swift. Pour déclarer une propriété de type, vous devez utiliser un mot clé statique.
"Le mot-clé let définit une constante" est source de confusion pour les débutants qui viennent de l'arrière-plan C # (comme moi). En termes C #, vous pouvez penser à "let" en tant que variable "readonly" .
(réponse à Comment le mot-clé "let" fonctionne-t-il exactement dans Swift? )
Utilisez à la fois static
et let
pour définir une constante
public static let pi = 3.1416 // Swift
public const double pi = 3.1416; // C#
public static final double pi = 3.1416 // Java
Chaque fois que j'utilise let
pour définir constante, j'ai l'impression d'utiliser readonly
de C #. Donc, j’utilise static
et let
pour définir constant dans Swift.