Tech

Swift: il sistema di sviluppo che segna una nuova era per Apple

Michele Costabile | 23 Settembre 2014

Apple

Esaminiamo il codice Swift che serve per aggiornare un elemento nel dizionario ricercando con chiave e conservando il valore precedente, […]

Esaminiamo il codice Swift che serve per aggiornare un elemento nel dizionario ricercando con chiave e conservando il valore precedente, se ne esiste uno.

if let oldValue = airports.updateValue("Dublin International", forKey: "DUB") {
println("Il valore precedente di DUB era \(oldValue).")
}

Si nota subito la somiglianza con questo frammento di Objective-C

[defaultAttributes setValue:font forKey:NSFontAttributeName];

La somiglianza non è casuale: il framework alle spalle di Swift è quello di Objective-C e la sintassi del nuovo linguaggio esalta la somiglianza. È quello che intendeva comunicare la frase «Swift è Objective-C senza il C».
Consideriamo il codice che cambia il valore della stringa descrittiva dell’aeroporto di Dublino:

airports.updateValue("Dublin International", forKey: "DUB")

Come abbiamo visto, airports, è un dizionario. Il metodo updateValue del dizionario è quello che aggiorna il valore associato a una chiave, se questo esiste. Il primo parametro è la stringa da associare, il secondo è la stringa “DUB” preceduta dal token forKey: che consente di specificare un nome per un parametro, in modo da rendere più chiara l’intenzione del codice rispetto all’uso di parametri posizionali. Avevamo già  visto questa funzionalità  in altri linguaggi, da Python a C#. Ecco un esempio di codice in cui usiamo un parametro per nome in una funzione che unisce due stringhe con uno spazio o una stringa specificata dal chiamante

func join(s1: String, s2: String, joiner: String = " ") -> String {
return s1 + joiner + s2
}

si noti che il parametro joiner ha un valore di default, quindi se non è specificato prenderà  il valore di uno spazio. Possiamo anche dare un valore al parametro, chiamandolo per nome, cioè specificando joiner: “, “. Non sarebbe indispensabile per togliere ambiguità , dato che il valore è passato nella terza posizione, quella corretta. Quando ci sono più parametri opzionali, invece, specificare il nome può diventare importante.

join("hello", "world", joiner: ", ")
// restituisce "hello, world"

swift 02

Swift permette di dare un nome esterno al parametro. Possiamo cioè mantenere il nome joiner nel corpo della funzione e consentire withJoiner nell’invocazione della funzione, come segue

func join(string s1: String, toString s2: String,
withJoiner joiner: String = " ") -> String {
return s1 + joiner + s2
}

join(string: “hello”, toString: “world”, withJoiner: “-“)
// restituisce “hello-world”

join(string: “hello”, toString: “world”)
// restituisce “hello world”

➜ Continua a leggere: Swift: il nuovo linguaggio

< Indietro Successivo >