Książki i czytelnicy
Część sekcji Programowanie obiektowe ścieżki Swift w Coddy. Lekcja 50 z 57.
W tym projekcie zbudujesz podstawę systemu bibliotecznego. Klasa Library otrzymuje polecenia, po jednym w wierszu, i odpowiada na każde z nich. W pięciu krokach nauczy się dodawać książki i członków, wypożyczać i zwracać książki, przeszukiwać katalog oraz drukować raport.
ADD_BOOK 1 Dune
JOIN ada
BORROW ada 1
RETURN ada 1
SEARCH dune
REPORTModel danych wykorzystuje narzędzia z tej sekcji. Book to struktura: wartość, której borrower się zmienia. Member to klasa, ponieważ biblioteka i lista wypożyczeń członka odnoszą się do tej samej osoby. Biblioteka przechowuje oba te elementy w prywatnych słownikach, więc zmieniać je mogą tylko jej metody:
struct Book {
let id: Int
let title: String
var borrower: String? = nil
var isAvailable: Bool { borrower == nil }
}
var books: [Int: Book] = [:]
books[1] = Book(id: 1, title: "Dune")
books[1]!.borrower = "ada"
print(books[1]!.isAvailable)Wynik:
falsehandle(_:) dzieli polecenie i sprawdza jego pierwsze słowo. Każda gałąź zwraca odpowiedzi w postaci tablicy, więc polecenie takie jak REPORT może zwrócić kilka wierszy. Tytuł książki może zawierać spacje, więc obejmuje wszystko po identyfikatorze:
let p = "ADD_BOOK 7 The Hobbit".split(separator: " ").map(String.init)
let id = Int(p[1])!
let title = p.dropFirst(2).joined(separator: " ")
print("\(id): \(title)")Wynik:
7: The HobbitWyzwanie
ŁatwyUzupełnij Library.handle(_:) dla dwóch pierwszych poleceń:
ADD_BOOK <id> <title>: zapisz nową dostępną książkę i zwróćadded book 1: Dune; jeśli identyfikator jest już zajęty, zwróćbook 1 exists.JOIN <name>: dodaj członka i zwróćwelcome ada; jeśli taka nazwa już istnieje, zwróćada is already a member.
Dostarczony kod przekazuje każdy wiersz wejścia do library.handle(_:) i wypisuje każdą zwróconą odpowiedź w osobnym wierszu. Nazwy członków to pojedyncze słowa pisane małymi literami, identyfikatory książek to liczby całkowite, a wejście zawiera tylko opisane dotąd polecenia. Na każde inne polecenie zwracana jest odpowiedź unknown command.
Umieść swój kod w plikach Book.swift, Member.swift i Library.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 library = Library()
for line in input {
for reply in library.handle(line) { print(reply) }
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
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