Que las declaraciones requieran una expresión de inicializador.

Estoy leyendo El lenguaje de progtwigción Swift, en la sección Valores simples

"Use let para hacer una constante y var para hacer una variable. El valor de una constante no necesita ser conocido en el time de compilation, pero debe asignarle un valor exactamente una vez "

Entonces creo que puedo hacer esto

let aConstant:Int aConstant = 5 

¡Pero me permiten que las declaraciones requieran una expresión de initialization !

Porqué es eso ? ¿Qué quieren decir con "El valor de una constante no necesita ser conocido en el time de compilation"?

De la reference del lenguaje Swift :

Cuando se declara una constante en el scope global, se debe inicializar con un valor.

Solo puede diferir la initialization de una constante en classs / estructuras, donde puede elegir inicializarla en el inicializador de la class / struct.

El significado de "El valor de una constante no necesita ser conocido en el time de compilation" se refiere al valor de la constante. En C / Objective-C a una constante global se le debe asignar un valor que puede ser calculado por el comstackdor (generalmente un literal como 10 o @"Hello" ). Lo siguiente no se permitiría en Objective-C:

 static const int foo = 10; // OK static const int bar = calculate_bar(); // Error: Initializer element is not a compile-time constant 

En Swift no tienes esta restricción:

 let foo = 10 // OK let bar = calculateBar(); // OK 

Editar:

La siguiente statement en la respuesta original no es correcta:

Solo puede diferir la initialization de una constante en classs / estructuras, donde puede elegir inicializarla en el inicializador de la class / struct.

El único lugar donde no puede diferir está en el scope global (es decir, en las expresiones de nivel superior let ). Si bien es cierto que puede diferir la initialization en una class / struct, ese no es el único lugar. Lo siguiente también es legal, por ejemplo:

 func foo() { let bar: Int bar = 1 } 

Una constante no necesita ser conocida en compilation, pero debe tener un valor después de la initialization:

 class MyClass: NSObject { let aConstant: Integer; // no value init() { aConstant = 4; // must have a value before calling super super.init(); } } 

Esto le permite establecer la constante a un valor después de que se declara y potencialmente se desconoce en el time de compilation.

La palabra key let , por definición, define una constant .

Por lo tanto, no puede modificarlo una vez que se haya configurado.

Como ese es el caso, ¡deben inicializarse cuando se declaran!

La solución aquí es hacer lo siguiente:

 let aConstant = 5 

o cámbialo a una var

 var aNonConstant:Int aNonConstant = 5 

Respuesta para Swift 2:

Puede escribir constantes de la siguiente manera:

 let aConstant:Int aConstant = 5 

Configurar el tipo de esta manera significa: "Esto será constante y tendrá valor cuando lo necesite". Tenga en count que no puede usar la constante antes de establecer el valor, hay un error de time de compilation:

Constante 'aConstant' usado antes de inicializarse

Además, puede establecer el valor de a aConstant solo una vez. Si intenta establecer el valor por segunda vez, hay un error en el time de compilation:

El valor inmutable 'aConstant' solo se puede inicializar una vez

De todos modos, no puede hacer esto para las constantes globales, hay un error de time de compilation:

La statement 'let' global requiere una expresión de inicializador.