Collection Types

Swift fornisce due tipi di raggruppamenti per i dati, noti come array e dizionari, per la memorizzazione di diversi valori. Gli Array memorizzano valori ordinati e dello stesso tipo; i dizionari memorizzano valori dello stesso tipo ma non ordinati, che possono essere consultati ed utilizzati attraverso un identificatore univoco (noto anche come chiave).

Matrici e dizionari in Swift sono sempre chiare sui tipi di valori e chiavi che possono memorizzare. Questo significa che non è possibile inserire un valore di tipo errato in un array o dizionario per errore. Significa, inoltre, si può essere fiduciosi circa i tipi di valori che recupera da un array o dizionario. L’utilizzo di Array o dizionari estremamente tipizzati permette di evitare errori nella stesura del codice.

 

Arrays
Un Array memorizza una serie di dati dello stesso tipo e in ordine. Uno stesso valore può apparire in un array più di una volta, in posizioni diverse.

In Swift è molto importante specificare il tipo di dato che un array può memorizzare. Si differenziano dalle classi NSArray e NSMutableArray in objective-C, che possono memorizzare qualunque tipo di dato e non forniscono informazioni sui tipi di dato restituiti. In Swift, il tipo di dati che un array può memorizzare è sempre esplicito: se ad esempio si crea un array di valori int, in quell’array non si possono inserire dati che non siano di tipo int.


Array Type Shorthand Syntax
Il tipo di un array in Swift è scritto in modo chiaro: Array<TIPO>, dove TIPO è il tipo di dato che l’array potrà contenere (ad esempio int, string…). Esiste un modo per dichiarare brevemente un array, nel seguente modo: TIPO[].  Entrambe le forme sono corrette ma è preferibile utilizzare la seconda.

Puoi inoltre inizializzare un array in maniera veramente semplificata, semplicemente scrivendo tra parentesi quadre alcuni valori, Swift ne riconoscerà automaticamente il tipo e lo imposterà automaticamente:

[value 1, value 2, value 3]

In questo esempio si crea un array chiamato shoppingList per memorizzare valori String:

var shoppingList: String[] = [“Eggs”, “Milk”]
// shoppingList has been initialized with two initial items

La variabile The shoppingList è dichiarata come una “lista di valori string”, scritta come String[]. Visto che è stata dichiarata come string, non potrà contenere altri valori oltre le stringhe. Nel seguente esempio, la lista shoppingList è inizializzata inserendo due valori (“Eggs” e “Milk”).

In questo caso, la stringa viene inizializzata con 2 valori string e nient’altro. Visto che sono esattamente del tipo dichiarato in precedenza per la variabile, vengono assegnati in automatico alla stringa shoppingList senza alcun problema.

Grazie all’inferenza di tipo in Swift, non c’è bisogno di scrivere il tipo di una lista se viene inizializzata con due o più valori dello stesso tipo. L’inizializzazione della lista shoppinglist può essere abbreviata in questo modo:

var shoppingList = [“Eggs”, “Milk”]

Visto che entrambi i valori sono di tipo string, Swift intuisce che dovrà inizializzare quella lista con il tipo string, senza dover scrivere il comando “string [].


Accesso e modifica di una lista

Per scoprire quanti valori contiene una lista si può agire nel seguente modo:

println(“The shopping list contains \(shoppingList.count) items.”)
// prints “The shopping list contains 2 items.

Usando il valore booleano “isEmpty” come scorciatoia per quando il contatore degli elementi è uguale a 0:

if shoppingList.isEmpty {
println(“The shopping list is empty.”)
} else {
println(“The shopping list is not empty.”)
}
// prints “The shopping list is not empty.

Puoi aggiungere un valore alla fine di una lista nel seguente modo:

shoppingList.append(“Flour”)
// shoppingList now contains 3 items, and someone is making pancakes

In alternativa puoi utilizzare gli operatori di addizione (+=):

shoppingList += “Baking Powder”
// shoppingList now contains 4 items

Puoi anche aggiungere ad una lista un’altra lista contenente valori di tipo compatibile, sempre utilizzando i seguenti operatori (+=):

shoppingList += [“Chocolate Spread”, “Cheese”, “Butter”]
// shoppingList now contains 7 items

Per leggere un valore in una data posizione, basta agire come nel seguente esempio. Notare che lo zero indica la prima posizione in una lista, quindi 1 indica la seconda posizione (in swift le liste sono “zero-indexed”:

var firstItem = shoppingList[0]
// firstItem is equal to “Eggs”

Puoi utilizzare questa sintassi per sostituire un valore in una data posizione:

shoppingList[0] = “Six eggs”
// the first item in the list is now equal to “Six eggs” rather than “Eggs”

Puoi anche cambiare un range di valori per volta, anche se la lunghezza del range e il numero di valori che vuoi modificare sono diversi. nel seguente esempio sostituiamo “Chocolate Spread”, “Cheese”, and “Butter” con “Bananas” and “Apples”:

shoppingList[4…6] = [“Bananas”, “Apples”]
// shoppingList now contains 6 items”

Per inserire un elemento in una specifica posizione di una lista, chiamiamo la posizione con il metodo (atIndex:) :

shoppingList.insert(“Maple Syrup”, atIndex: 0)
// shoppingList now contains 7 items
// “Maple Syrup” is now the first item in the list

Questa chiamata inserisce il valore “Maple Syrup” nella prima posizione della lista, indicata con il valore 0 (zero).

Molto simile il metodo per rimuovere un valore in una data posizione: removeAtIndex method. Questo metodo rimuove un valore nella posizione specificata e restituisce il valore eliminato (se non hai bisogno del valore eliminato, puoi ignorarlo):

let mapleSyrup = shoppingList.removeAtIndex(0)
// the item that was at index 0 has just been removed
// shoppingList now contains 6 items, and no Maple Syrup
// the mapleSyrup constant is now equal to the removed “Maple Syrup” string

Quando viene eliminato un valore, tutti gli altri cambiano di posizione, scalando di un posto. In questo caso, “Six eggs” arriva in posizione zero:

firstItem = shoppingList[0]
// firstItem is now equal to “Six eggs”

Se vuoi togliere il valore finale in una lista puoi utilizzare il metodo removeLast invece di removeAtIndex per evitare di richiamare il metodo che serve a contare le posizioni dei valori. Anche  removeLast restituisce il valore eliminato:

let apples = shoppingList.removeLast()
// the last item in the array has just been removed
// shoppingList now contains 5 items, and no cheese
// the apples constant is now equal to the removed “Apples” string

Iterating Over an Array

Attraverso un for-in loop puoi iterare tra tutti i valori contenuti in una lista:

for item in shoppingList {
println(item)
}
// Six eggs
// Milk
// Flour
// Baking Powder
// Bananas

Se necessiti che venga restituito,oltre al valore, anche il numero dell’indice di ogni valore stesso, puoi utilizzare la funzione enumerate function. Questo metodo restituisce una tupla contenente il valore stesso e il suo numero di indice. Puoi scomporre temporaneamente il contenuto della tupla in costanti o variabili, così da averle chiare a schermo:

for (index, value) in enumerate(shoppingList) {
println(“Item \(index + 1): \(value)”)
}
// Item 1: Six eggs
// Item 2: Milk
// Item 3: Flour
// Item 4: Baking Powder
// Item 5: Bananas

VOLETE ESSERE AGGIORNATI TEMPESTIVAMENTE ALL’USCITA DI UN NUOVO CAPITOLO ? BASTA UN LIKE SULLA NOSTRA PAGINA FACEBOOK!