Una stringa rappresenta dati testuali.
In Swift, una String è una collezione ordinata di valori Character, dove ogni carattere rappresenta un carattere Unicode.
Per creare una stringa si usa un letterale di stringa, cioè una sequenza di caratteri racchiusa tra virgolette doppie (").
Per le stringhe su più righe, usa tre virgolette doppie ("""):
let hello: String = "Hello, World!"
let poem: String = """
Roses are red,
Violets are blue.
Sugar is sweet,
And so are you.
"""
Le stringhe di Swift si integrano senza problemi con la classe NSString del framework Foundation, offrendo accesso a vaste capacità di elaborazione del testo.
Un Character rappresenta un singolo cluster di grafemi esteso, cioè un carattere leggibile dall'uomo composto da uno o più valori scalari Unicode.
Un valore scalare Unicode è un code point a 21 bit nell'intervallo da U+0000 a U+D7FF incluso, oppure da U+E000 a U+10FFFF incluso.
let aChar: Character = "A"
Quando scrivi un letterale di stringa, Swift ne deduce automaticamente il tipo come String.
Per memorizzare un singolo carattere come Character, devi fornire un'annotazione di tipo esplicita:
let aString = "A" // Inferred as String
let aChar: Character = "A" // Explicitly typed as Character
print(type(of: aString)) // Prints String
print(type(of: aChar)) // Prints Character
// The following code will not compile:
let badChar: Character = "Too many characters"
// Error: Cannot convert value of type 'String' to specified type 'Character'
Puoi unire più stringhe usando l'operatore di addizione (+):
print("honey" + "comb")
// Prints "honeycomb"
Non puoi concatenare direttamente un Character a una String usando + senza prima convertire il carattere in una stringa.
Tuttavia, puoi usare il metodo append(_:) per aggiungere direttamente una stringa o un carattere a una stringa mutabile:
var greeting = "Hello"
let world = ", world"
let period: Character = "."
greeting.append(world)
print(greeting) // Prints "Hello, world"
greeting.append(period)
print(greeting) // Prints "Hello, world."
L'interpolazione di stringhe ti permette di costruire una stringa inserendo costanti, variabili, letterali ed espressioni all'interno di letterali di stringa.
Racchiudi ogni espressione tra parentesi precedute da una barra rovesciata (\( ... )):
let radius = 5.0
let circle = "The area of a circle with radius \(radius) is \(Double.pi * radius * radius)"
print(circle) // Prints "The area of a circle with radius 5.0 is 78.53981633974483"
Le stringhe e i caratteri offrono diverse proprietà per esaminarne il contenuto.
Alcune proprietà comuni delle stringhe sono:
| Proprietà | Descrizione | Esempio |
|---|---|---|
isEmpty |
Restituisce true se la stringa non ha caratteri |
"Hello".isEmpty restituisce false
|
count |
Restituisce il numero di caratteri nella stringa |
"Hello".count restituisce 5
|
Per un elenco completo delle proprietà, consulta la documentazione di Apple su String.
Alcune proprietà comuni dei caratteri sono:
| Proprietà | Descrizione | Esempio |
|---|---|---|
isLowercase |
Restituisce true se il carattere è minuscolo |
"a".isLowercase restituisce true
|
isUppercase |
Restituisce true se il carattere è maiuscolo |
"A".isUppercase restituisce true
|
isNumber |
Restituisce true se il carattere è una cifra |
"1".isNumber restituisce true
|
isWhitespace |
Restituisce true se il carattere è uno spazio bianco |
" ".isWhitespace restituisce true
|
Per un elenco completo delle proprietà, consulta la documentazione di Apple su Character.
Puoi convertire altri tipi in stringhe usando l'inizializzatore String(_:), che supporta tipi standard come Int, Double e Character:
let charX: Character = "x"
print(String(charX)) // Prints "x"
print(String(110)) // Prints "110"
print(String(Double.pi)) // Prints "3.141592653589793"
I letterali di stringa di Swift supportano diverse sequenze di escape per i caratteri speciali:
| Sequenza | Descrizione |
|---|---|
\0 |
Carattere nullo |
\\ |
Barra rovesciata |
\t |
Tabulazione orizzontale |
\n |
Avanzamento di riga (newline) |
\r |
Ritorno a capo |
\' |
Virgoletta singola |
\" |
Virgoletta doppia |
\u{n} |
Valore scalare Unicode arbitrario (esadecimale) |
let quote: String = "\"Hello\", he said."
print(quote) // Prints "Hello", he said.
let unicode: Character = "\u{1F496}"
print(unicode) // Prints 💖
In questo esercizio scriverai del codice per aiutare un'azienda di insegne a creare messaggi personalizzati per le sue insegne.
Definisci le seguenti stringhe costanti, che verranno usate per creare le insegne:
birthday: contiene il valore "Birthday"valentine: contiene il valore "Valentine's Day"anniversary: contiene la stringa "Anniversary"Definisci i seguenti caratteri costanti, che verranno usati per creare le insegne:
space: contiene il valore " " (un singolo spazio)exclamation: contiene il valore "!"Implementa la funzione buildSign(for:name:), che prende l'argomento for, che contiene una delle tre stringhe definite nella prima attività, e l'argomento name, una stringa che contiene il nome della persona a cui è destinata l'insegna.
Usa la concatenazione per comporre il messaggio dell'insegna e ricorda di riutilizzare le costanti già definite.
La funzione deve restituire il messaggio dell'insegna come stringa.
buildSign(for: birthday, name: "Otto")
// returns "Happy Birthday Otto!"
buildSign(for: anniversary, name: "Valentina")
// returns "Happy Anniversary Valentina!"
Implementa la funzione graduationFor(name:year:), che prende l'argomento name, una stringa che contiene il nome della persona a cui è destinata l'insegna, e l'argomento year, un numero intero che contiene l'anno in cui la persona si laurea.
Usa le stringhe interpolate per comporre il messaggio dell'insegna.
La funzione deve restituire il messaggio dell'insegna come stringa.
graduationFor(name: "Padma", year: 2023)
// returns "Congratulations Padma!\nClass of 2023"
Implementa la funzione costOf(sign:), che prende l'argomento sign, una stringa che contiene il messaggio dell'insegna.
L'insegna ha un prezzo base di 20 nella valuta data. Inoltre ogni lettera costa 2 (gli spazi bianchi sono inclusi nel calcolo).
La funzione deve restituire il costo dell'insegna come numero intero.
costOf(sign: "Happy Birthday Grandma!")
// returns 66
Iscriviti a Exercism per imparare e padroneggiare Swift con 35 concetti116 esercizi e il mentoring di persone reali, tutto gratis.