Track
/
Swift
Swift
/
Esercizi
/
La bottega di insegne di Cal
La bottega di insegne di Cal

La bottega di insegne di Cal

Esercizio di apprendimento

Introduzione

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.

Caratteri

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"

Inferenza di tipo

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'

Concatenazione

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."

Interpolazione di stringhe

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"

Proprietà di stringhe e caratteri

Le stringhe e i caratteri offrono diverse proprietà per esaminarne il contenuto.

Proprietà delle stringhe

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.

Proprietà dei caratteri

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.

Conversione di tipo

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"

Caratteri speciali

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 💖

Istruzioni

In questo esercizio scriverai del codice per aiutare un'azienda di insegne a creare messaggi personalizzati per le sue insegne.

1. Crea un insieme di stringhe utili

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"

2. Crea un insieme di caratteri utili

Definisci i seguenti caratteri costanti, che verranno usati per creare le insegne:

  • space: contiene il valore " " (un singolo spazio)
  • exclamation: contiene il valore "!"

3. Combina le frasi per comporre i messaggi

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!"

4. Crea un'insegna di laurea

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"

5. Calcola il costo di un'insegna

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
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Swift Exercism

Vuoi iniziare La bottega di insegne di Cal?

Iscriviti a Exercism per imparare e padroneggiare Swift con 35 concetti116 esercizi e il mentoring di persone reali, tutto gratis.