Książki i czytelnicy
Część sekcji Programowanie obiektowe ścieżki Swift w Coddy. Lekcja 50 z 57.
W tym projekcie zbudujesz podstawy systemu bibliotecznego. Klasa Library otrzymuje polecenia, po jednym w wierszu, i odpowiada na każde z nich. W pięciu krokach nauczysz się dodawać książki i członków, wypożyczać i oddawać 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 obiekty w prywatnych słownikach, więc tylko jej metody mogą je zmieniać:
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 wykonuje przełączenie na podstawie jego pierwszego słowa. Każda gałąź zwraca odpowiedzi jako tablicę, 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óć odpowiedźadded book 1: Dune; jeśli identyfikator jest zajęty, zwróćbook 1 exists.JOIN <name>: dodaj członka i zwróć odpowiedźwelcome ada; jeśli nazwa już istnieje, zwróćada is already a member.
Dostarczony kod przekazuje każdy wiersz wejściowy do library.handle(_:) i wypisuje każdą zwróconą odpowiedź w osobnym wierszu. Nazwy członków składają się z pojedynczych słów pisanych małymi literami, identyfikatory książek są liczbami całkowitymi, a wejście zawiera tylko opisane dotąd polecenia. Każde inne polecenie zwraca unknown command.
Twój kod umieść 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