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!
Lascia un commento