Dal Swift Language Reference:
When a constant is declared at global scope, it must be initialized with a value.
È possibile rimandare solo inizializzazione di un costante in classi/structs, dove puoi scegliere di inizializzarlo in t inizializzatore della classe/struct.
Il significato di "Il valore di una costante non deve essere noto al momento della compilazione" si riferisce al valore della costante. In C/Objective-C una costante globale deve essere assegnata a un valore che può essere calcolato dal compilatore (di solito un valore letterale come 10
o @"Hello"
). Quanto segue non sarebbe stato consentito in Objective-C:
static const int foo = 10; // OK
static const int bar = calculate_bar(); // Error: Initializer element is not a compile-time constant
In Swift non si dispone di questa restrizione:
let foo = 10 // OK
let bar = calculateBar(); // OK
Edit:
La seguente dichiarazione nella risposta originale non è corretto:
L'unico posto dove Non è possibile eseguire il rinvio nello spazio globale (ad es. livello superiore let
espressioni). Mentre è vero che è possibile rinviare l'inizializzazione in una classe/struttura, non è l'unico posto. Quello che segue è anche legale per esempio:
func foo() {
let bar: Int
bar = 1
}
come su "Il valore della una costante non ha bisogno di essere conosciuta in fase di compilazione "? – onmyway133
No, non si può fare 'let aConstant = functionThatGeneratesARandomNumber()', ma è ancora una costante dopo quel punto e non è possibile riassegnarlo. – Jack
Inoltre, le costanti in Swift non sono limitate a valori letterali come 'Int'. Puoi avere una costante che è un oggetto creato in fase di esecuzione. L'unica cosa che devi ricordare è che non può essere riassegnata dopo la sua definita (costante!) – Jack