Nhà để xe
Thuộc phần Lập trình hướng đối tượng trong hành trình Swift của Coddy. Bài học 55 trên 57.
Thử thách
KhóHãy xây dựng một nhà để xe. Giao thức Vehicle có plate, size (một enum Size: Int, Comparable với small = 1, medium = 2, large = 3) và hourlyRate. Hãy triển khai Motorbike (cỡ nhỏ, 1 mỗi giờ), Car (cỡ vừa, 3) và Van (cỡ lớn, 5). Lớp Garage được tạo với số chỗ đỗ cho từng cỡ. park(_:) đưa xe vào chỗ trống có cùng cỡ hoặc, nếu không còn chỗ, vào chỗ trống có cỡ lớn hơn tiếp theo, rồi trả về parked AB12 in medium hoặc full for AB12. leave(plate:hours:) giải phóng chỗ đỗ rồi trả về AB12 paid 9 (đơn giá nhân số giờ, tối thiểu 1 giờ) hoặc no vehicle AB12. status() trả về free: small 1, medium 0, large 2.
Code được cung cấp đọc số chỗ theo thứ tự small,medium,large, sau đó đọc các lệnh park car AB12, leave AB12 3 hoặc status và in ra từng phản hồi.
Hãy viết code trong các tệp Size.swift, Vehicle.swift, Motorbike.swift, Car.swift, Van.swift và Garage.swift. main.swift chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.
Tự làm thử
// Đoạn code đầu vào/đầu ra đã được cung cấp: giữ nguyên
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())
}
}
Tất cả bài học trong Lập trình hướng đối tượng
1Lớp và đối tượng
Làm việc với tệpĐịnh nghĩa lớpPhương thức và selfHàm khởi tạoLớp là tham chiếuÔn tập: Thẻ thư viện2Struct và kiểu giá trị
StructNgữ nghĩa giá trịPhương thức thay đổiStruct hay classÔn tập: mặt hàng trong kho5Kế thừa
Lớp conGhi đè phương thứcHàm khởi tạo và superfinal và hệ phân cấpÔn tập: hệ phân cấp nhân viên8Các giao thức tiêu chuẩn
CustomStringConvertibleEquatableComparableHashableÔn tập: Sắp xếp tùy chỉnhTự luyện tập: Playground Swift