חניון
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Swift של Coddy. שיעור 55 מתוך 57.
אתגר
קשהבנו חניון. לפרוטוקול Vehicle יש plate, size (enum בשם Size: Int, Comparable עם small = 1, medium = 2, large = 3) ו-hourlyRate. ממשו את Motorbike (קטן, 1 לשעה), את Car (בינוני, 3) ואת Van (גדול, 5). המחלקה Garage נוצרת עם מספר מקומות לכל גודל. park(_:) מחנה רכב במקום פנוי בגודל המתאים לו, או, אם אין מקום פנוי, במקום בגודל הבא אחריו, ומחזירה parked AB12 in medium או full for AB12. leave(plate:hours:) מפנה את המקום ומחזירה AB12 paid 9 (תעריף כפול מספר השעות, לפחות שעה אחת), או no vehicle AB12. status() מחזירה free: small 1, medium 0, large 2.
הקוד שסופק קורא את מספר המקומות בפורמט small,medium,large, ואז פקודות כגון park car AB12, leave AB12 3 או status, ומדפיס כל תשובה.
כתבו את הקוד שלכם בקבצים Size.swift, Vehicle.swift, Motorbike.swift, Car.swift, Van.swift ו-Garage.swift. הקובץ main.swift מכיל את קוד הקלט/פלט שסופק, ואי אפשר לערוך אותו.
נסו בעצמכם
// קוד קלט/פלט שסופק: יש להשאיר אותו כפי שהוא
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())
}
}
כל השיעורים ביחידה תכנות מונחה עצמים
תרגלו בעצמכם: Swift אונליין