Siamo arrivati alla terza ed ultima parte di questo tour di swift, nel prossimo capitolo inizieremo a vedere il linguaggio nel dettaglio, partendo da zero.

Si noti che l’inizializzatore per la classe EquilateralTriangle ha tre diverse fasi:

1 – Importare il valore delle proprietà dichiarate nelle sottoclassi.
2 – Richiamare l’inizializzazione della superclasse.
3 – Cambiare il valore delle proprietà definite dalla superclasse.

class TriangleAndSquare {
    var triangle: EquilateralTriangle {
    willSet {
        square.sideLength = newValue.sideLength
    }
}
var square: Square {
    willSet {
    triangle.sideLength = newValue.sideLength
    }
}
init(size: Double, name: String) {
    square = Square(sideLength: size, name: name)
    triangle = EquilateralTriangle(sideLength: size, name: name)
     }
}
var triangleAndSquare = TriangleAndSquare(size: 10, name: “another test shape”)
triangleAndSquare.square.sideLength
triangleAndSquare.triangle.sideLength
triangleAndSquare.square = Square(sideLength: 50, name: “larger square”)
triangleAndSquare.triangle.sideLength

I metodi contenuti nelle classi hanno differenze molto importanti rispetto alle funzioni. I nomi dei parametri delle funzioni vengono utilizzati solamente all’interno della funzione stessa, ma i parametri dei metodi sono utilizzati anche quando si richiama il metodo (tranne che per il primo parametro). È possibile specificare un secondo nome, che viene utilizzato all’interno del metodo.

class Counter {
    var count: Int = 0
    func incrementBy(amount: Int, numberOfTimes times: Int) {
        count += amount * times
    }
}
var counter = Counter()
    counter.incrementBy(2, numberOfTimes: 7)

Quando si lavora con valori opzionali,  puoi anteporre ? prima di metodi o proprietà. Se il valore dopo ? è nil, tutto il codice prima di ? viene ignorato e i valori dell’intera espressione è nullo. Altrimenti, il valore opzionale viene ignorato e tutto il codice prima di ? agisce sul valore da scartare.

let optionalSquare: Square? = Square(sideLength: 2.5, name: “optional square”)
let sideLength = optionalSquare?.sideLength

 

ENUMERAZIONI E STRUTTURE
Usare enum per creare una enumerazione. Come per le classi, le enumerazioni possono avere metodi ad esse associati.

enum Rank: Int {
case Ace = 1
case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
case Jack, Queen, King
func simpleDescription() -> String {
    switch self {
    case .Ace:
        return “ace”
    case .Jack:
        return “jack”
    case .Queen:
        return “queen”
    case .King:
        return “king”
    default:
        return String(self.toRaw())
        }
    }
}
let ace = Rank.Ace
let aceRawValue = ace.toRaw()

 

Nell’esempio precedente, il valore raw dell’enumerazione è Int, icosì c’è bisogno di specificare solo il primo. Il resto dei valori raw vengono assegnati in ordine. È inoltre possibile utilizzare stringhe o numeri a virgola mobile come tipo prima di una enumerazione.

Utilizzare le funzioni toRaw e fromRaw per la conversione tra il valore grezzo e il valore di enumerazione.

 

if let convertedRank = Rank.fromRaw(3) {
    let threeDescription = convertedRank.simpleDescription()
}

I valori dei dati di una enumerazione sono valori reali, non rappresentano quindi un altro modo di scrivere i loro valori grezzi. Infatti, nei casi in cui non esiste un valore grezzo significativo, non c’è bisogno di fornire uno.

 

enum Suit {
    case Spades, Hearts, Diamonds, Clubs
    func simpleDescription() -> String {
        switch self {
        case .Spades:
            return “spades”
        case .Hearts:
            return “hearts”
        case .Diamonds:
            return “diamonds”
        case .Clubs:
            return “clubs”
           }
        }
    }
let hearts = Suit.Hearts
let heartsDescription = hearts.simpleDescription()

Come potete notare dall’esempio precedente, quando si assegna un valore alla costante hearts, Suit.Hearts viene indicato con il suo nome completo, perché la costante non è specificata esplicitamente. All’interno di switch,  l’enumerazione viene indicata con la forma abbreviata “. Hearts” perché il valore del self è già noto per essere un suit.

 

Con questo possiamo concludere il “tour”, dal prossimo capitolo inizieremo il corso vero e proprio, partendo da zero.

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