Il est peut-être préférable d'exprimer cette différence par la notion de Mutabilité / Immutabilité qui est le paradigme correct de la changeabilité des valeurs et des instances dans l'espace des objets qui est plus large que les seules notions habituelles de "constant / variable". En outre, cette notion est plus proche de l'approche de l'Objective C.
2 types de données : le type de valeur et le type de référence.
Dans le contexte des types de valeurs :
let" définit une valeur constante (immuable). var " définit une valeur modifiable (mutable).
let aInt = 1 //< aInt is not changeable
var aInt = 1 //< aInt can be changed
Dans le contexte des types de référence :
L'étiquette d'une donnée n'est pas la valeur mais la référence à une valeur.
if aPerson = Person(name:Foo, first:Bar)
aPerson ne contient pas les données de cette personne mais la référence aux données de cette personne.
let aPerson = Person(name:Foo, first:Bar)
//< data of aPerson are changeable, not the reference
var aPerson = Person(name:Foo, first:Bar)
//< both reference and data are changeable.
eg :
var aPersonA = Person(name:A, first: a)
var aPersonB = Person(name:B, first: b)
aPersonA = aPersonB
aPersonA now refers to Person(name:B, first: b)
et
let aPersonA = Person(name:A, first: a)
let aPersonB = Person(name:B, first: b)
let aPersonA = aPersonB // won't compile
mais
let aPersonA = Person(name:A, first: a)
aPersonA.name = "B" // will compile
45 votes
Let est pour les constantes, var est pour les variables.
2 votes
@Edward Que voulez-vous dire par "pas de vérification de type à la compilation" ? Pour autant que je puisse dire, c'est statiquement typé, mais les types sont déduits si le compilateur peut le découvrir par lui-même. Mais je n'en suis qu'à la page 25... ;-)
5 votes
Cette question est dans le sujet, mais elle est mal formulée. Il y a au moins 2 questions (i) différence entre let et var ; (ii) type safe vs type infer. En outre, lorsque l'affiche a mentionné phase de production il voulait vraiment dire au moment de l'exécution.
1 votes
De plus, var utilisé sur des variables qui définissent des collections (tableaux & dictionnaire) crée une collection mutable (non seulement la référence mais aussi le contenu de la collection peuvent être modifiés. L'autre utilisation de var est la possibilité de modifier les paramètres passés dans une fonction : func foo(var bar:Int) vous permettra de modifier le paramètre bar localement dans la portée de la fonction.
0 votes
Duplicata possible de Différencier let et var en langage de programmation Swift
0 votes
@Khnle-Kevin pour le type Safety vs. type inference voir ici
0 votes
J'ai l'impression stackoverflow.com/questions/24002999/ est plus utile que toutes les réponses ici