the - swift wikipedia
¿Cuál es la diferencia entre `let` y` var` en swift? (26)
“Usa let para hacer una constante y var para hacer una variable”
Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks.
https://itun.es/us/jEUH0.l
¿Cuál es la diferencia entre let
y var
en el lenguaje Swift de Apple?
A mi entender, es un lenguaje compilado pero no comprueba el tipo en tiempo de compilación. Me confunde. ¿Cómo sabe el compilador sobre el error de tipo? Si el compilador no comprueba el tipo, ¿no es un problema con el entorno de producción?
Al igual que Luc-Oliver, NullData y algunos otros que han dicho aquí, let
definir datos inmutables, mientras que var
define datos mutables. Cualquier func
que se pueda llamar en la variable marcada como mutating
solo se puede llamar si es una variable var
(el compilador generará un error). Esto también se aplica a las func
que toman una variable de entrada.
Sin embargo, let
y var
también significan que la variable no se puede reasignar. Tiene dos significados, ambos con propósitos muy similares.
Aunque actualmente sigo leyendo el manual, pero creo que esto está muy cerca del puntero const
C / C ++. En otras palabras, algo parecido a la diferencia entre char const*
y char*
. El compilador también se niega a actualizar el contenido, no solo a la reasignación de referencias (puntero).
Por ejemplo, digamos que tienes esta estructura. Tenga cuidado de que esto sea una estructura, no una clase. AFAIK, las clases no tienen un concepto de estado inmutable.
import Foundation
struct
AAA
{
var inner_value1 = 111
mutating func
mutatingMethod1()
{
inner_value1 = 222
}
}
let aaa1 = AAA()
aaa1.mutatingMethod1() // compile error
aaa1.inner_value1 = 444 // compile error
var aaa2 = AAA()
aaa2.mutatingMethod1() // OK
aaa2.inner_value1 = 444 // OK
Debido a que las estructuras son inmutables de forma predeterminada, debe marcar un método de mutating
con mutating
. Y como el nombre aaa1
es constante, no se puede llamar ningún método mutador en él. Esto es exactamente lo que esperábamos en los punteros C / C ++.
Creo que este es un mecanismo para soportar un tipo de cosas de corrección constante .
Declare constantes con la palabra clave let y variables con la palabra clave var.
let maximumNumberOfLoginAttempts = 10 var currentLoginAttempt = 0
let maximumNumberOfLoginAttempts = 10
var currentLoginAttempt = 0
Declare constantes múltiples o variables múltiples en una sola línea, separadas por comas:
var x = 0.0, y = 0.0, z = 0.0
Constantes de impresión y variables
Puede imprimir el valor actual de una constante o variable con la función println:
println(friendlyWelcome)
Swift utiliza la interpolación de cadenas para incluir el nombre de una constante o variable como un marcador de posición en una cadena más larga
Envuelva el nombre entre paréntesis y escúchelo con una barra invertida antes del paréntesis de apertura:
println("The current value of friendlyWelcome is /(friendlyWelcome)")
Referencia: http://iosswift.com.au/?p=17
En veloz tenemos dos tipos de variables.
- var
- dejar
ambos de estos trabajos son iguales, contienen objetos (valor de copia, valor de referencia, etc.).
En var variable puedo cambiar el objeto que contiene a otro mientras se ejecuta el programa
var x = 12
x = 13 // it is Ok
En la variable let no puedo cambiar el objeto que contiene a otro mientras que el programa se ejecuta, tengo que inicializarlo primero. Es como constante o final en otros lenguajes como Java, C ++.
let x = 12
x = 13 // it is not OK , it will generate error
Encontré una buena respuesta espero que pueda ayudar :)
La palabra clave let
define una constante:
let theAnswer = 42
El theAnswer
no se puede cambiar después. Es por esto que cualquier cosa weak
no puede ser escrita usando let
. Deben cambiar durante el tiempo de ejecución y debes usar var
lugar.
La var
define una variable ordinaria.
Qué es interesante:
El valor de una constante no necesita ser conocido en el momento de la compilación , pero debe asignar el valor exactamente una vez.
Otra característica extraña:
Puede usar casi cualquier carácter que desee para los nombres de variables y constantes, incluidos los caracteres Unicode:
let 🐶🐮 = "dogcow"
Extractos de: Apple Inc. "El lenguaje de programación Swift". IBooks. https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewBook?id=881256329
EDITAR
Debido a que los comentarios solicitan agregar otros hechos a la respuesta, esto se convierte en una respuesta de la comunidad wiki . Siéntete libre de editar la respuesta para mejorarla.
La palabra clave var se utiliza para definir una variable cuyo valor puede cambiar fácilmente de la siguiente manera:
var no1 = 1 // declaring the variable
no1 = 2 // changing the value since it is defined as a variable not a constant
Sin embargo, la palabra clave let es solo para crear una constante utilizada cuando no desea cambiar el valor de la constante nuevamente. Si intentara cambiar el valor de la constante, obtendrá un error:
let no2 = 5 // declaring no2 as a constant
no2 = 8 // this will give an error as you cannot change the value of a constant
La principal diferencia es que el valor de la variable var
puede cambiar, y let
que no pueda. Si desea tener una entrada de datos de usuario, usaría var
para que el valor pueda cambiarse y use la variable let
data type para que el valor no pueda cambiarse
var str = "dog" // str value is "dog"
str = "cat" // str value is now "cat"
let strAnimal = "dog" // strAnimal value is "dog"
strAnimal = "cat" // Error !
Let es una variable inmutable, lo que significa que no se puede cambiar, otros idiomas llaman a esto una constante. En C ++ se puede definir como const.
Var es una variable mutable, lo que significa que se puede cambiar. En C ++ (actualización de la versión 2011), es lo mismo que usar auto, aunque swift permite una mayor flexibilidad en el uso. Este es el tipo de variable más conocido para los principiantes.
Según el libro de lenguaje de programación Swift
Al igual que C, Swift usa variables para almacenar y referirse a valores por un nombre de identificación. Swift también hace un uso extensivo de variables cuyos valores no se pueden cambiar. Estas se conocen como constantes y son mucho más poderosas que las constantes en C.
Tanto var
como let
son referencias , por lo tanto let
es una referencia constante . El uso de tipos fundamentales no muestra en realidad cómo es diferente de const
. La diferencia viene cuando se usa con instancias de clase (tipos de referencia):
class CTest
{
var str : String = ""
}
let letTest = CTest()
letTest.str = "test" // OK
letTest.str = "another test" // Still OK
//letTest = CTest() // Error
var varTest1 = CTest()
var varTest2 = CTest()
var varTest3 = CTest()
varTest1.str = "var 1"
varTest2.str = "var 2"
varTest3 = varTest1
varTest1.str = "var 3"
varTest3.str // "var 3"
Tal vez sea mejor establecer esta diferencia mediante la noción de mutabilidad / inmutabilidad que es el paradigma correcto de valores e intercambiabilidad de instancias en el espacio de Objetos que es más grande que las únicas nociones habituales de "constante / variable". Y además, esto está más cerca del enfoque del Objetivo C.
2 tipos de datos: tipo de valor y tipo de referencia.
En el contexto de los tipos de valor:
''let'' define un valor constante (untamable). ''var'' define un valor cambiable (mutable).
let aInt = 1 //< aInt is not changeable
var aInt = 1 //< aInt can be changed
En el contexto de los tipos de referencia:
La etiqueta de un dato no es el valor sino la referencia a un valor.
si aPerson = Person (nombre: Foo, primero: Bar)
aPerson no contiene los datos de esta persona, sino la referencia a los datos de esta persona.
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)
Todo el mundo ha respondido bastante a esto, pero aquí hay una manera de recordar qué es lo que
Deje que siempre diga lo mismo que "dejar", ya que esto funciona por una vez y siempre que las variables "var" siempre pueden cambiar, por lo tanto, se llaman variables "
Un valor puede ser reasignado en caso de var
//Variables
var age = 42
println(age) //Will print 42
age = 90
println(age) //Will Print 90
** la constante newAge no se puede reasignar a un nuevo valor. Tratar de hacerlo dará un error de tiempo de compilación **
//Constants
let newAge = 92 //Declaring a constant using let
println(newAge) //Will print 92.
Una diferencia más, que he encontrado en otros idiomas para Constantes es: no se puede inicializar la constante (dejar) para más adelante , debe iniciarse cuando esté a punto de declarar la constante.
Por ejemplo :
let constantValue : Int // Compile error - let declarations require an initialiser expression
Variable
var variableValue : Int // No issues
dejar que la palabra clave define una constante
let myNum = 7
entonces myNum no puede ser cambiado después;
Pero var define una variable ordinaria.
El valor de una constante no necesita ser conocido en el momento de la compilación, pero debe asignarle un valor exactamente una vez.
Puede usar casi cualquier carácter que desee para los nombres de variables y constantes, incluidos los caracteres Unicode;
p.ej
var x = 7 // here x is instantiated with 7
x = 99 // now x is 99 it means it has been changed.
Pero si nos tomamos entonces ...
let x = 7 // here also x is instantiated with 7
x = 99 // this will a compile time error
let se usa para constantes que no pueden modificarse mientras que var es una variable ordinaria
Ejemplo:
let name = "Bob" Algo como name = "Jim" producirá un error ya que no se puede modificar una constante.
los
La sección Declaración de constantes y variables de la documentación del lenguaje de programación Swift especifica lo siguiente:
Usted declara constantes con la palabra clave let y variables con la palabra clave var.
Asegúrese de entender cómo funciona esto para los tipos de referencia. A diferencia de los tipos de valor, las propiedades subyacentes del objeto pueden cambiar a pesar de que una instancia de un tipo de referencia se declare como una constante. Vea la sección Clases son tipos de referencia de la documentación y observe el ejemplo en el que cambian la propiedad frameRate.
let
definir una "constante". Su valor se establece una vez y solo una vez, aunque no necesariamente cuando se declara. Por ejemplo, utiliza let
para definir una propiedad en una clase que debe establecerse durante la inicialización:
class Person {
let firstName: String
let lastName: String
init(first: String, last: String) {
firstName = first
lastName = last
super.init()
}
}
Con esta configuración, no es válido asignar el primer nombre o el lastName
nombre después de llamar (por ejemplo) Person(first:"Malcolm", last:"Reynolds")
para crear una instancia de Person
.
Debe definir un tipo para todas las variables ( let
o var
) en tiempo de compilación, y cualquier código que intente establecer una variable solo puede usar ese tipo (o un subtipo). Puede asignar un valor en tiempo de ejecución, pero su tipo debe ser conocido en tiempo de compilación.
let
se usa para definir constantes y var
para definir variables.
let
se utiliza para declarar un valor constante, lo que significa que no lo cambiará después de darle un valor inicial.
var
se utiliza para decalre un valor variable, lo que significa que puede cambiar su valor como desee.
var
es la única manera de crear una variable en swift. var
no significa variable dinámica como en el caso de lenguajes interpretados como javascript. Por ejemplo,
var name = "Bob"
En este caso, el tipo de name
de la variable se infiere que el nombre es de tipo String
, también podemos crear variables definiendo explícitamente el tipo, por ejemplo
var age:Int = 20
Ahora, si asigna una cadena a la edad, entonces el compilador da el error.
let
se usa para declarar constantes. Por ejemplo
let city = "Kathmandu"
O también podemos hacer,
let city:String = "Kathmandu"
Si intenta cambiar el valor de la ciudad, se produce un error en el momento de la compilación.
let se usa para definir constantes y var para definir variables. Usted define la cadena usando var y luego la cadena en particular puede modificarse (o mutarse) asignándola a una variable (en cuyo caso puede modificarse), y si define la cadena usando let es una constante (en cuyo caso no puede ser modificado):
var variableString = "Apple"
variableString += " and Banana"
// variableString is now "Apple and Banana"
let constantString = "Apple"
constantString += " and another Banana"
// this reports a compile-time error - a constant string cannot be modified
El valor de var puede ser cambiado, después de inicializar. Pero dejar que el valor no sea cambio, cuando se intiliza una vez.
En caso de var
function variable() {
var number = 5, number = 6;
console.log(number); // return console value is 6
}
variable();
En caso de dejar
function abc() {
let number = 5, number = 6;
console.log(number); // TypeError: redeclaration of let number
}
abc();
Let es un valor constante, por lo que nunca se puede cambiar.
let number = 5
number = 6 //This will not compile.
Var es una variable y puede cambiar (pero después de que se define no para un tipo de datos diferente).
var number = 5
number = 6 //This will compile.
Si intenta cambiar la variable a un tipo de datos diferente, no funcionará
var number = 5
number = "Hello World" //This will not compile.
Muy simple:
-
let
sea constante. -
var
es dinámico.
Poco de descripción:
let
crea una constante. ( NSString
como una NSString
). No puedes cambiar su valor una vez que lo hayas establecido. Aun así, puedes agregarlo a otras cosas y crear nuevas variables.
var
crea una variable (algo así como NSMutableString
) para que pueda cambiar el valor de la misma. Pero esto ha sido contestado varias veces.