Swift Language String and Character Literals


Esempio

I valori letterali delle stringhe in Swift sono delimitati da virgolette doppie ( " ):

let greeting = "Hello!"  // greeting's type is String

I caratteri possono essere inizializzati da string letterali, purché il letterale contenga solo un grafo grafo:

let chr: Character = "H" // valid
let chr2: Character = "😊" // valid
let chr3: Character = "abc" // invalid - multiple grapheme clusters

Interpolazione a stringa

L'interpolazione delle stringhe consente di iniettare un'espressione direttamente in una stringa letterale. Questo può essere fatto con tutti i tipi di valori, comprese stringhe, numeri interi, numeri in virgola mobile e altro.

La sintassi è una barra rovesciata seguita da parentesi che racchiudono il valore: \(value) . Qualsiasi espressione valida può apparire tra parentesi, incluse le chiamate di funzione.

let number = 5
let interpolatedNumber = "\(number)"  // string is "5"
let fortyTwo = "\(6 * 7)"             // string is "42"

let example = "This post has \(number) view\(number == 1 ? "" : "s")"
// It will output "This post has 5 views" for the above example.
// If the variable number had the value 1, it would output "This post has 1 view" instead.

Per i tipi personalizzati, il comportamento predefinito dell'interpolazione delle stringhe è che "\(myobj)" è equivalente a String(myobj) , la stessa rappresentazione utilizzata da print(myobj) . È possibile personalizzare questo comportamento implementando il protocollo CustomStringConvertible per il proprio tipo.

3.0

Per Swift 3, in conformità con SE-0089 , String.init<T>(_:) è stato rinominato in String.init<T>(describing:) .

L'interpolazione stringa "\(myobj)" preferirà il nuovo String.init<T: LosslessStringConvertible>(_:) initializer, ma ritornerà a init<T>(describing:) se il valore non è LosslessStringConvertible .

Personaggi speciali

Alcuni personaggi richiedono una sequenza di escape speciale per utilizzarli in stringhe letterali:

Personaggio Senso
\0 il carattere null
\\ un semplice backslash, \
\t un carattere di tabulazione
\v una scheda verticale
\r un ritorno a capo
\n un avanzamento riga ("newline")
\" una doppia citazione, "
\' una sola citazione, '
\u{n} il codice Unicode point n (in esadecimale)

Esempio:

let message = "Then he said, \"I \u{1F496} you!\""

print(message) // Then he said, "I 💖 you!"