Estacionamiento
Parte de la sección Programación orientada a objetos del Journey de Swift de Coddy. Lección 55 de 57.
Desafío
DifícilConstruye un garaje de estacionamiento. El protocolo Vehicle tiene plate, size (una enumeración Size: Int, Comparable con small = 1, medium = 2, large = 3) y hourlyRate. Implementa Motorbike (pequeña, 1 por hora), Car (mediano, 3) y Van (grande, 5). La clase Garage se crea con un número de plazas por tamaño. park(_:) coloca un vehículo en una plaza libre de su propio tamaño o, si no hay ninguna libre, de la siguiente talla mayor, y responde parked AB12 in medium o full for AB12. leave(plate:hours:) libera la plaza y responde AB12 paid 9 (tarifa multiplicada por las horas, como mínimo 1 hora), o no vehicle AB12. status() responde free: small 1, medium 0, large 2.
El código proporcionado lee las plazas como small,medium,large, después los comandos park car AB12, leave AB12 3 o status, e imprime cada respuesta.
Tu código va en Size.swift, Vehicle.swift, Motorbike.swift, Car.swift, Van.swift y Garage.swift. main.swift contiene el código proporcionado de entrada/salida y no se puede editar.
Pruébalo tú mismo
// Código de entrada/salida suministrado: déjalo tal como está
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())
}
}
Todas las lecciones de Programación orientada a objetos
1Clases y objetos
Trabajar con archivosDefinir clasesMétodos y selfInicializadoresLas clases son referenciasRepaso: tarjeta de biblioteca4Encapsulación
Control de accesoSolo lectura desde fueraProtección del estadoInicializadores que pueden fallarRepaso - Cuenta bancaria7Polimorfismo y genéricos
PolimorfismoConversión de tiposFunciones genéricasTipos genéricosRepaso - Calculadora de formas2Structs y tipos por valor
StructsSemántica de valoresMétodos mutablesStruct o claseRepaso - elemento del inventario5Herencia
SubclasesSobrescritura de métodosInicializadores y superfinal y jerarquíasRepaso: jerarquía de empleados8Protocolos estándar
CustomStringConvertibleEquatableComparableHashableRepaso - Ordenamiento personalizado11Proyecto: Gestión de bibliotecas
Libros y miembrosPréstamo de librosPractica por tu cuenta: Playground de Swift