Menu
Coddy logo textTech

Membri statici

Fa parte della sezione Programmazione orientata agli oggetti del percorso Swift di Coddy. Lezione 14 di 57.

Una proprietà static appartiene al tipo stesso, non a una sua istanza. Esiste una sola copia, accessibile tramite il nome del tipo:

struct Temperature {
    static let freezing = 0.0
    static let boiling = 100.0
    var celsius: Double
}

print(Temperature.boiling - Temperature.freezing)

Output:

100.0

Una static var può cambiare, il che la rende utile per i dati condivisi da tutte le istanze, come un contatore del numero di istanze create:

class Ticket {
    static var issued = 0
    let number: Int

    init() {
        Ticket.issued += 1
        number = Ticket.issued
    }
}

let a = Ticket()
let b = Ticket()
print(a.number)
print(b.number)
print(Ticket.issued)

Output:

1
2
2

Una static func viene chiamata sul tipo. Non ha un'istanza self con cui lavorare, quindi usa solo i suoi argomenti e altri membri statici. È un buon posto per gli helper e per i metodi con nome che creano istanze:

struct Color {
    var red: Int
    var green: Int
    var blue: Int

    static func gray(_ level: Int) -> Color {
        Color(red: level, green: level, blue: level)
    }
}

let c = Color.gray(128)
print(c.red + c.green + c.blue)

Output:

384

All'interno del tipo, Self è un altro modo per indicare il tipo, quindi i membri statici possono essere scritti come Self.issued. I metodi di istanza possono leggere i membri statici, ma un metodo statico non può leggere le proprietà di istanza, perché non viene chiamato su un'istanza.

struct Level {
    static let maximum = 10
    var current = 1
    func isMax() -> Bool { current == Self.maximum }   // il metodo di istanza legge static
    static func describe() -> String { "levels 1-\(maximum)" } // il metodo static legge static
}
challenge icon

Sfida

Facile

Completa la classe Order. Una proprietà statica nextId inizia da 1 e ogni nuovo ordine usa il valore corrente di nextId come id e lo incrementa. Una costante statica taxPercent è 10. Il metodo di istanza total() restituisce il subtotale più l'imposta (arrotondato per difetto), mentre il metodo statico summary(of:) riceve un array di ordini e restituisce 3 orders, 660 total.

Il codice fornito legge un subtotale per riga, crea un ordine per ciascuno, stampa #1: 110 per ogni ordine e infine stampa il riepilogo.

Il tuo codice va in Order.swift. main.swift contiene il codice di input/output fornito e non può essere modificato.

Provalo tu

// Codice di input/output fornito: lascialo così com'è
var input: [String] = []
while let line = readLine() { input.append(line) }
var orders: [Order] = []
for line in input {
    let order = Order(subtotal: Int(line)!)
    orders.append(order)
    print("#\(order.id): \(order.total())")
}
print(Order.summary(of: orders))
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Playground Swift