Parking
Część sekcji Programowanie obiektowe ścieżki Swift w Coddy. Lekcja 55 z 57.
Wyzwanie
TrudnyZbuduj parking. Protokół Vehicle ma właściwości plate, size (wyliczenie Size: Int, Comparable z wartościami small = 1, medium = 2, large = 3) i hourlyRate. Zaimplementuj Motorbike (mały, 1 za godzinę), Car (średni, 3) i Van (duży, 5). Klasa Garage jest tworzona z liczbą miejsc parkingowych dla każdego rozmiaru. park(_:) umieszcza pojazd na wolnym miejscu odpowiadającym jego rozmiarowi lub, jeśli takiego nie ma, na wolnym miejscu o kolejnym większym rozmiarze, i zwraca parked AB12 in medium albo full for AB12. leave(plate:hours:) zwalnia miejsce i zwraca AB12 paid 9 (stawka pomnożona przez liczbę godzin, co najmniej 1 godzinę) albo no vehicle AB12. status() zwraca free: small 1, medium 0, large 2.
Dostarczony kod odczytuje liczbę miejsc w formacie small,medium,large, a następnie polecenia park car AB12, leave AB12 3 lub status, po czym wypisuje każdą odpowiedź.
Twój kod umieść w plikach Size.swift, Vehicle.swift, Motorbike.swift, Car.swift, Van.swift i Garage.swift. Plik main.swift zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
// Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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())
}
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasMetody i selfInicjalizatoryKlasy są referencjamiPowtórzenie — karta biblioteczna4Hermetyzacja
Kontrola dostępuTylko do odczytu z zewnątrzOchrona stanuInicjalizatory, które mogą zawieśćPodsumowanie — konto bankowe7Polimorfizm i typy generyczne
PolimorfizmRzutowanie typówFunkcje generyczneTypy generycznePodsumowanie – kalkulator kształtów2Struktury i typy wartościowe
StrukturySemantyka wartościMetody modyfikująceStruktura czy klasaPodsumowanie – element inwentarza5Dziedziczenie
PodklasyPrzesłanianie metodInicjalizatory i superfinal i hierarchiePodsumowanie — hierarchia pracowników8Standardowe protokoły
CustomStringConvertibleEquatableComparableHashablePodsumowanie — własne sortowanie11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Edytor online Swift