Garage di parcheggio
Fa parte della sezione Programmazione orientata agli oggetti del percorso Swift di Coddy. Lezione 55 di 57.
Sfida
DifficileCrea un garage. Il protocollo Vehicle ha plate, size (un’enumerazione Size: Int, Comparable con small = 1, medium = 2, large = 3) e hourlyRate. Implementa Motorbike (piccola, 1 all’ora), Car (media, 3) e Van (grande, 5). La classe Garage viene creata con un numero di posti per ogni dimensione. park(_:) mette un veicolo in un posto libero della sua stessa dimensione o, se non ce ne sono, della dimensione immediatamente superiore, e risponde parked AB12 in medium oppure full for AB12. leave(plate:hours:) libera il posto e risponde AB12 paid 9 (tariffa moltiplicata per le ore, almeno 1 ora), oppure no vehicle AB12. status() risponde free: small 1, medium 0, large 2.
Il codice fornito legge i posti nel formato small,medium,large, poi i comandi park car AB12, leave AB12 3 oppure status, e stampa ogni risposta.
Il tuo codice va inserito in Size.swift, Vehicle.swift, Motorbike.swift, Car.swift, Van.swift e Garage.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) }
let s = input[0].split(separator: ",").map { Int($0)! }
let garage = Garage(small: s[0], medium: s[1], large: s[2])
for cmd in input.dropFirst() {
let p = cmd.split(separator: " ").map(String.init)
switch p[0] {
case "park":
let v: any Vehicle
switch p[1] {
case "bike": v = Motorbike(plate: p[2])
case "van": v = Van(plate: p[2])
default: v = Car(plate: p[2])
}
print(garage.park(v))
case "leave": print(garage.leave(plate: p[1], hours: Int(p[2])!))
default: print(garage.status())
}
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Classi e oggetti
Lavorare con i fileDefinire le classiMetodi e selfInizializzatoriLe classi sono riferimentiRiepilogo - Tessera della biblioteca4Incapsulamento
Controllo degli accessiSola lettura dall’esternoProteggere lo statoInizializzatori che possono fallireRiepilogo - Conto bancario7Polimorfismo e tipi generici
PolimorfismoCasting dei tipiFunzioni genericheTipi genericiRipasso - Calcolatore di forme2Struct e tipi valore
Le structSemantica dei valoriMetodi mutantiStruct o classeRiepilogo - Articolo di inventario5Ereditarietà
SottoclassiSovrascrivere i metodiInizializzatori e superfinal e gerarchieRiepilogo - Gerarchia dei dipendenti8Protocolli standard
CustomStringConvertibleEquatableComparableHashableRiepilogo - Ordinamento personalizzato11Progetto: Gestione della biblioteca
Libri e utentiPrestito dei libriEsercitati da solo: Playground Swift