Quelle est la différence entre "laisser" et " var " dans swift?
Quelle est la différence entre let
et var
dans Apple Swift langue?
Dans ma compréhension, c'est un langage compilé, mais il ne vérifie pas le type au moment de la compilation. Il me rend confus. Comment le compilateur de savoir sur le type d'erreur? Si le compilateur ne vérifie pas le type, n'est-il pas un problème avec l'environnement de production?
- laissez est pour les constantes, var est pour les variables.
- Qu'entendez-vous par aucun type de vérification au moment de la compilation? Aussi loin que je peux dire, c'est statiquement typé, mais les types sont déduits si le compilateur peut le comprendre par lui-même. Mais ensuite, je ne suis qu'à la page 25... 😉
- C'est sur le sujet, mais un mal formulé la question. Il y a au moins 2 questions (i) la diff entre la laisse et le var; (ii) type de coffre-fort vs type déduire. En outre, lorsque l'affiche mentionnée au stade de la production, il voulait vraiment dire au moment de l'exécution.
- En outre, la var utilisée sur les variables qui définissent les collections (tableaux & dictionnaire) crée une mutable collection (et pas seulement de la référence, mais le contenu de la collection peuvent être modifiés. L'autre utilisation de la var est d'être capable de modifier les paramètres passés à une fonction: func foo(var bar:Int) va vous permettre de modifier les param bar localement dans le domaine de la fonction.
- double possible de se Différencier de la location et de la var dans le Langage de Programmation Swift
- pour le type de Sécurité contre l'inférence de type, voir here
Vous devez vous connecter pour publier un commentaire.
La
let
mot-clé définit une constante:La
theAnswer
ne peut pas être modifié par la suite. C'est pourquoi rienweak
ne peut pas être écrite à l'aide delet
. Ils ont besoin de changement en cours d'exécution, vous devez utiliservar
à la place.La
var
définit ordinaire variable.Ce qui est intéressant:
Une autre particularité:
Des Extraits De: Apple Inc. “La Swift Langage de Programmation.” iBooks. https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewBook?id=881256329
MODIFIER
Car les commentaires demandant l'ajout d'autres faits de la réponse, la conversion de ce à wiki de la communauté réponse. Se sentir libre de modifier la réponse à la rendre meilleure.
auto = "dogcow";
fonctionne en C++ pour clang.if === { = ♠︎ }
🙂 😉const
existe déjà en Objective C. j'ai peut-être tort, mais je pense qu'il est nécessaire de pointer un objet, contrairement àlet
où les constantes ne sont pas des pointeurs.let
est immuable et il ne peut pas être changer plus tard, une fois initialisé, et je vois que tout le monde prend desintegers
leur exemple. Essayez de prendre uneNSMutableArray
avec let préfixe et vous pouvez toujours ajouter et supprimer des objets de cette. Correcte est let fait const pointeur donc, nous ne pouvons pas procéder à l'initialisation de l'objet nouveau, mais on peut changer sa valeur en ajoutant ou en en ajoutant.let
ne peut pas être changer. Voir les autres répondre. Et BTW, je ne suis pas pointer n'importe où.let foo = [1, 2, 3]; foo[2] = 5;
légale était qu'une "fonctionnalité" de la version la plus ancienne de la langue. Il a rapidement été (ahem) fixe: Comment créer un immuable tableau dans Swift? (La première partie de votre commentaire, à propos de la REPL, ne me tiens.)Selon Le Langage De Programmation Swift Livre
Les deux
var
etlet
sont références, donclet
est un const référence.À l'aide de types fondamentaux n'a pas vraiment montrer comment
let
est différent de celuiconst
.La différence vient lors de l'utilisation avec des instances de classe (les types de référence):
var
etlet
n'ont rien à voir avec le fait que l'identifiant étant liée à l'est de référencer ou non. Si le type est unstruct
type, il est conceptuellement une valeur. Si le type est unclass
il est conceptuellement une référence et la référence est une constante silet
est utilisé. SiCTest
était un struct, aucun de vosletTest
affectations serait de travailler.struct
c'est un type de valeur, il n'y a rien de conceptuel à ce sujet. De même avecclass
- type de référence. Quand portées à un type de valeur que vous créez une nouvelle instance de ce type. developer.apple.com/swift/blog/?id=10 Alors, évidemment, vous ne pouvez pas modifier les champs/propriétés delet
lié au type de la valeur.let
est utilisé pour définir des constantes etvar
pour définir les variables.Très simple:
let
est constante.var
est dynamique.Peu de description:
let
crée une constante. (un peu comme uneNSString
). Vous ne pouvez pas modifier sa valeur une fois que vous avez défini. Vous pouvez toujours l'ajouter à d'autres choses et de créer de nouvelles variables si.var
crée une variable. (un peu commeNSMutableString
) de sorte que vous pouvez changer la valeur de l'informatique. Mais ce qui a été répondu à plusieurs reprises.La
Déclarer des Variables et des Constantes section de La Swift Langage de Programmation documentation précise les points suivants:
Assurez-vous de comprendre comment cela fonctionne pour les types Référence. À la différence des Types de Valeur, l'objet sous-jacent de propriétés changent en dépit d'une instance d'un type de référence d'être déclaré comme une constante. Voir la Les Classes sont des Types Référence section de la documentation, et de regarder l'exemple où ils changer le frameRate de la propriété.
C'est peut-être mieux à l'état de cette différence par la Mutabilité /Unmutability notion que c'est la bonne paradigme des valeurs et des instances de la variabilité dans les Objets de l'espace, qui est plus vaste que la seule "constante /variable" d'habitude notions.
Et en outre ce qui est plus proche de l'Objectif C approche.
2 types de données: type de la valeur et le type de référence.
Dans le contexte de Types de Valeur:
'laisser' définit une valeur constante (indomptable). 'var' définit une variable valeur (mutable).
Dans le contexte de Types de Référence:
L'étiquette de données n'est pas la valeur, mais la référence à une valeur.
si toute personne âgée = Personne(nom:Foo, première:Barre)
toute personne âgée qui ne contiennent pas les Données de cette personne, mais la référence aux données de cette Personne.
aPerson
a setters vous pouvez modifier ses propriétés à droite? ainsi, lelet
ne pas faire laPerson
immuable.let
définit une "constante". Sa valeur est fixée une fois et seulement une fois, mais pas nécessairement quand vous déclarez. Par exemple, vous utilisezlet
définir une propriété dans une classe qui doit être défini lors de l'initialisation:Avec cette configuration, il est invalide à attribuer à
firstName
oulastName
après l'appel (par exemple)Person(first:"Malcolm", last:"Reynolds")
pour créer unPerson
instance.Vous doit définir un type de toutes les variables (
let
ouvar
) au moment de la compilation, et tout le code qui tente de définir une variable ne peut utiliser que le type (ou un sous-type). Vous pouvez attribuer un valeur au moment de l'exécution, mais son type doit être connue au moment de la compilation.Une différence, que j'ai rencontré dans d'autres langues pour les Constantes est : ne peut pas initialiser la constante(let) pour plus tard , faut initialiser comme vous êtes sur le point de déclarer la constante.
Par exemple :
Variable
let
est utilisé pour déclarer une valeur constante - vous de ne pas le modifier après avoir donner une valeur initiale.var
est utilisé pour déclarer une variable de valeur vous pouvez changer sa valeur en tant que vous le souhaitez.laisser est utilisé pour définir des constantes et var pour définir les variables.
Vous définissez la chaîne à l'aide de var ensuite Chaîne de caractères peut être modifiée (ou muté) par de l'affecter à une variable (dans ce cas, il peut être modifié), et si vous définissez la chaîne à l'aide de laisser sa constante (dans ce cas, il ne peut pas être modifié):
Comme Luc-Olivier, NullData, et quelques autres l'ont dit ici,
let
définit les données immuables, tandis quevar
définit mutable données. Toutfunc
qui peuvent être appelées sur la variable qui est marquémutating
ne peut être appelée que si c'est unvar
variable (compilateur va jeter erreur). Cela s'applique également àfunc
's que de prendre dans uninout
variable.Cependant,
let
etvar
aussi dire que la variable ne peut pas être modifiée. Il a deux significations, à la fois très similaire à des fins devar valeur peut être changer, après l'initialisation. Mais laisser valeur n'est pas le changement, lorsqu'il est intilize une fois.
Dans le cas de la var
En cas de laisser
Le mot-clé var est utilisé pour définir une variable dont la valeur que vous pouvez facilement modifier comme ceci:
Cependant, le mot-clé let est uniquement pour créer une constante utilisée lorsque vous ne souhaitez pas modifier la valeur de la constante de nouveau. Si vous essayez de changer la valeur de la constante, vous obtiendrez un message d'erreur:
Laissez est immuable variable, ce qui signifie qu'il ne peut pas être changé, d'autres langues appeler cela une constante. En C++, vous pouvez le définir comme const.
Var est une variable mutable, ce qui signifie qu'il peut être modifié. En C++ (2011 version mise à jour), c'est la même que l'utilisation de l'auto, bien que swift permet plus de souplesse dans l'utilisation. C'est le plus bien connu type de variable pour les débutants.
var est variable, ce qui peut être modifié autant de fois que vous voulez et quand
par exemple
laisser est une constante qui ne peut pas être changé
par exemple
mot-clé let définit une constante
donc myNum ne peut pas être modifiée par la suite;
Mais var définit ordinaire variable.
La valeur d'une constante n'a pas besoin d'être connu au moment de la compilation, mais vous devez lui affecter une valeur exactement une fois.
Vous pouvez utiliser presque n'importe quel personnage que vous aimez pour les constantes et les noms de variables, y compris des caractères Unicode;
par exemple
Mais si nous prenons le laisser alors...
Tout le monde a à peu près répondu à cette question, mais voici une façon dont vous pouvez vous souvenir de quoi il s'agit
Laissez toujours dire la même pense à "laisser" que de laisser ce travail, pour une fois, et toujours pour "var" de la variable peut toujours changer, partant, de leur appelé la variable
laisser est une valeur constante, de sorte qu'il ne peut jamais être changé.
Var est une variable, et peut changer (mais après il n'est pas défini pour un type de données différent.)
Si vous essayez de changer la variable d'un type de données différent, il ne fonctionnera pas
var
est la seule façon de créer des variables en swift.var
ne signifie pas que la variable dynamique comme dans le cas des langages comme javascript. Par exemple,Dans ce cas, le type de la variable
name
est déduit que le nom est de typeString
, nous pouvons également créer des variables explicitement à la définition de type, par exempleMaintenant, si vous affectez une chaîne à l'âge, alors le compilateur donne l'erreur.
let
est utilisé pour déclarer des constantes. Par exempleOu on peut aussi faire du,
Si vous essayez de modifier la valeur de la ville, il donne une erreur au moment de la compilation.
La principale différence est que
var
valeur de la variable peut changer, etlet
ne le peuvent pas. Si vous voulez avoir une entrée de l'utilisateur des données, vous devez utiliservar
de sorte que la valeur peut être modifiée et l'utilisationlet
type de données de la variable de sorte que la valeur ne peut pas être changé.Let
etVar
aussi de ne pas travaillerUne valeur peut être réaffectés dans le cas de la var
** le newAge constante ne peut être réaffectée à une nouvelle valeur. Essayer de le faire sera de donner une erreur de compilation**
laissez est utilisé pour les constantes qui ne peut pas être modifié pendant la var est une variable
Exemple:
let nom = “Bob”
Quelque chose comme name = “Jim” lève une erreur, puisqu'une constante ne peut pas être modifié.
“Utiliser que pour faire un constant et du var pour faire une variable”
Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks.
https://itun.es/us/jEUH0.lMême si vous avez déjà obtenu beaucoup de différence entre la laisse et le var, mais une différence principale est:
SIMPLE DIFFÉRENCE
laissez = (ne peut pas être changé)
var = (a tout moment la mise à jour)
Source: https://thenucleargeeks.com/2019/04/10/swift-let-vs-var/
Lorsque vous déclarez une variable var, cela signifie qu'il peut être mis à jour, il est variable, sa valeur peut être modifiée.
Lorsque vous déclarez une variable avec laissez, cela signifie qu'il ne peut pas être mis à jour, il est non variable, sa valeur ne peut pas être modifié.
Nous permettent de comprendre, l'exemple ci-dessus: Nous avons créé une nouvelle variable “a” par “mot-clé var” et la valeur “1”. Lorsque j'imprime “un”, j'obtiens en sortie 1. Puis-je attribuer 2 de “var” je.e je suis la modification de la valeur de la variable “a”. Je peux le faire sans se faire d'erreur du compilateur parce que je l'ai déclaré que la var.
Dans le deuxième scénario, j'ai créé une nouvelle variable “b” avec “let mot-clé” et la valeur “4”. Lorsque j'imprime “b” j'ai eu 4 en sortie. Alors j'essaie d'affecter 5 à “let b” c'est à dire que je suis en train de modifier le “let” variable et-je obtenir le temps de compilation d'erreur “Ne peut pas attribuer de valeur: "b" est un " let " constante”.
let
exemple :var
exemple :Si vous essayez de modifier une immuable
let
, Xcode, vous montrera une erreur :Mais une mutable
var
peut être facilement changé :Espère que cette aide.
Si actuellement je suis encore lu le manuel, mais je pense que c'est très proche du C/C++
const
pointeur. En d'autres termes, quelque chose comme différence entrechar const*
etchar*
. Compilateur refuse également de mettre à jour le contenu, non seulement la référence de la réaffectation (pointeur).Par exemple, disons que vous avez cette structure. Prendre soin que c'est une struct, pas une classe. Autant que je sache, les classes n'ont pas un concept de l'état immuable.
Parce que leurs structures sont immuables par défaut, vous devez marquer un mutateur méthode avec
mutating
. Et parce que le nomaaa1
est constante, vous ne pouvez pas appeler une méthode mutateur sur elle. C'est exactement ce que nous attendions sur le C/C++ les pointeurs.Je crois que c'est un mécanisme à l'appui de une sorte de const-correctness trucs.
Déclarer des constantes avec le mot-clé let et variables avec le mot-clé var.
Déclarer plusieurs constantes ou plusieurs variables sur une même ligne, séparés par des virgules:
Impression des Constantes et des Variables
Vous pouvez imprimer la valeur actuelle d'une constante ou d'une variable avec la fonction println:
Swift utilise de la chaîne d'interpolation pour inclure le nom d'une constante ou une variable comme un espace réservé dans une longue chaîne
Envelopper le nom entre parenthèses et échapper avec une barre oblique inverse avant l'ouverture de la parenthèse:
Référence : http://iosswift.com.au/?p=17
Trouvé une bonne réponse espère que cela peut aider 🙂
let
ne signifie pas que le objet est immuable, cela signifie que le pointeur est immuable. Pour obtenir l'équivalent de la fonctionnalité en Obj-C, il faut utiliserNSObject *const myObject = someobject;
- Les propriétés de l'objet peut être modifié, mais le pointeurmyObject
ne peut pas être modifié pour pointer vers un autre objet.const pointer
qui ne peut pas être changer dans le futur, mais sa valeur peut être. Vous ne pouvez pas réinitialiser, mais pouvez l'utiliser comme vous le souhaitez.