web-dev-qa-db-fra.com

Quelle est l'utilisation du mot clé "static" si le mot clé "let" est utilisé pour définir les constantes / immuables dans swift?

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?

51
Poles

Je vais les décomposer pour vous:

  • var: utilisé pour créer une variable
  • let: utilisé pour créer une constante
  • static: 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 constante
  • static var cnt = 0: propriété de type qui est une variable
  • let id = 0: constante (ne peut être affecté qu'une seule fois, mais peut l'être lors de l'exécution)
  • var price = 0: variable

Donc, 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
110
Alex Pelletier

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.

86
Bobby

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 ..

10
Vinoth Vino

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.

1
user3441734

"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.

1
Hassan Tareq