import Foundation protocol Car { var model: String { get } var color: String { get } var buildDate: Date { get } var price: Int { get set} var accessories: [String] { get set } var isServiced: Bool { get set } } //extension Car { // static func ==(lhs: Car, rhs: Car) -> Bool { // return lhs.model == rhs.model && // lhs.color == rhs.color && // lhs.buildDate == rhs.buildDate && // lhs.price == rhs.price && // lhs.isServiced == rhs.isServiced // } //} protocol Dealership { var name: String { get } var showroomCapacity: Int { get } var stockCars: [Car] { get set } var showroomCars: [Car] { get set } var cars: [Car] { get } func offerAccesirues(accesories: [String]) func presaleService(car: Car) func addToShowroom(car: Car) func sellCar(car: Car) func orderCar() } struct BMW: Car{ var model: String = "BMW" var color: String = "Black" var buildDate: Date = Date.now var price: Int = 10000 var accessories: [String] = [] var isServiced: Bool = false } //extension BMW: Equatable { // static func ==(lhs: BMW, rhs: BMW) -> Bool { // return lhs.model == rhs.model && // lhs.color == rhs.color && // lhs.buildDate == rhs.buildDate && // lhs.price == rhs.price && // lhs.isServiced == rhs.isServiced // } //} struct Honda: Car { var model: String = "Honda" var color: String = "Red" var buildDate: Date = Date.now var price: Int = 999 var accessories: [String] = ["Black wheels"] var isServiced: Bool = true } struct Audi: Car { var model: String = "Audi" var color: String = "Black" var buildDate: Date = Date.now var price: Int = 5000 var accessories: [String] = [] var isServiced: Bool = false } struct Lexus: Car { var model: String = "Lexus" var color: String = "Gray" var buildDate: Date = Date.now var price: Int = 500 var accessories: [String] = ["Turbo engine"] var isServiced: Bool = false } struct Volvo: Car { var model: String = "Volvo" var color: String = "White" var buildDate: Date = Date.now var price: Int = 500 var accessories: [String] = [] var isServiced: Bool = true } var factoryCars: [Car] = [] factoryCars.append(BMW()) factoryCars.append(Volvo()) class BMWDealer: Dealership { var name: String var showroomCapacity: Int var stockCars: [Car] var showroomCars: [Car] var cars: [Car]{ stockCars + showroomCars } init(name: String, showroomCapacity: Int, stockCars: [Car], showroomCars: [Car]) { self.name = name self.showroomCapacity = showroomCapacity self.stockCars = stockCars self.showroomCars = showroomCars } func offerAccesirues(accesories: [String]) { print("Предложить дополнительные аксессуары \(accesories)") } func presaleService(car: Car) { if !car.isServiced { var carCopy = car carCopy.isServiced = true print("Машина найдена в базе и отправлена на предпродажную подготовку") } else { print("Машина уже на предпродажной подготовке") } } func addToShowroom(car: Car) { for i in 0...stockCars.count { if stockCars[i].model == car.model { stockCars.remove(at: i) } } for i in 0...showroomCars.count { if showroomCars[i].model == car.model { print("Машина в автосалоне") } else { showroomCars.append(car) print("Машина в автосалоне") } } } func sellCar(car: Car) { if car.isServiced { for i in 0...showroomCars.count { if showroomCars[i].model == car.model { showroomCars.remove(at: i) print("Машина продана") } else { print("Машина не в автосалоне") } } if car.accessories.isEmpty { print("Предложение купить дополнительное оборудование") } } else { print("Машина не подготовлена") } } func orderCar() { if let lastCar = factoryCars.last { stockCars.append(lastCar) print("Машина добавлена в заказ") } } } class HondaDealer: Dealership { var name: String var showroomCapacity: Int var stockCars: [Car] var showroomCars: [Car] var cars: [Car]{ stockCars + showroomCars } init(name: String, showroomCapacity: Int, stockCars: [Car], showroomCars: [Car]) { self.name = name self.showroomCapacity = showroomCapacity self.stockCars = stockCars self.showroomCars = showroomCars } func offerAccesirues(accesories: [String]) { print("Предложить дополнительные аксессуары \(accesories)") } func presaleService(car: Car) { if !car.isServiced { var carCopy = car carCopy.isServiced = true print("Машина найдена в базе и отправлена на предпродажную подготовку") } else { print("Машина уже на предпродажной подготовке") } } func addToShowroom(car: Car) { for i in 0...stockCars.count { if stockCars[i].model == car.model { stockCars.remove(at: i) } } for i in 0...showroomCars.count { if showroomCars[i].model == car.model { print("Машина в автосалоне") } else { showroomCars.append(car) print("Машина в автосалоне") } } } func sellCar(car: Car) { if car.isServiced { for i in 0...showroomCars.count { if showroomCars[i].model == car.model { showroomCars.remove(at: i) print("Машина продана") } else { print("Машина не в автосалоне") } } if car.accessories.isEmpty { print("Предложение купить дополнительное оборудование") } } else { print("Машина не подготовлена") } } func orderCar() { if let lastCar = factoryCars.last { stockCars.append(lastCar) print("Машина добавлена в заказ") } } } class AudiDealer: Dealership { var name: String var showroomCapacity: Int var stockCars: [Car] var showroomCars: [Car] var cars: [Car]{ stockCars + showroomCars } init(name: String, showroomCapacity: Int, stockCars: [Car], showroomCars: [Car]) { self.name = name self.showroomCapacity = showroomCapacity self.stockCars = stockCars self.showroomCars = showroomCars } func offerAccesirues(accesories: [String]) { print("Предложить дополнительные аксессуары \(accesories)") } func presaleService(car: Car) { if !car.isServiced { var carCopy = car carCopy.isServiced = true print("Машина найдена в базе и отправлена на предпродажную подготовку") } else { print("Машина уже на предпродажной подготовке") } } func addToShowroom(car: Car) { for i in 0...stockCars.count { if stockCars[i].model == car.model { stockCars.remove(at: i) } } for i in 0...showroomCars.count { if showroomCars[i].model == car.model { print("Машина в автосалоне") } else { showroomCars.append(car) print("Машина в автосалоне") } } } func sellCar(car: Car) { if car.isServiced { for i in 0...showroomCars.count { if showroomCars[i].model == car.model { showroomCars.remove(at: i) print("Машина продана") } else { print("Машина не в автосалоне") } } if car.accessories.isEmpty { print("Предложение купить дополнительное оборудование") } } else { print("Машина не подготовлена") } } func orderCar() { if let lastCar = factoryCars.last { stockCars.append(lastCar) print("Машина добавлена в заказ") } } } class LexusDealer: Dealership { var name: String var showroomCapacity: Int var stockCars: [Car] var showroomCars: [Car] var cars: [Car]{ stockCars + showroomCars } init(name: String, showroomCapacity: Int, stockCars: [Car], showroomCars: [Car]) { self.name = name self.showroomCapacity = showroomCapacity self.stockCars = stockCars self.showroomCars = showroomCars } func offerAccesirues(accesories: [String]) { print("Предложить дополнительные аксессуары \(accesories)") } func presaleService(car: Car) { if !car.isServiced { var carCopy = car carCopy.isServiced = true print("Машина найдена в базе и отправлена на предпродажную подготовку") } else { print("Машина уже на предпродажной подготовке") } } func addToShowroom(car: Car) { for i in 0...stockCars.count { if stockCars[i].model == car.model { stockCars.remove(at: i) } } for i in 0...showroomCars.count { if showroomCars[i].model == car.model { print("Машина в автосалоне") } else { showroomCars.append(car) print("Машина в автосалоне") } } } func sellCar(car: Car) { if car.isServiced { for i in 0...showroomCars.count { if showroomCars[i].model == car.model { showroomCars.remove(at: i) print("Машина продана") } else { print("Машина не в автосалоне") } } if car.accessories.isEmpty { print("Предложение купить дополнительное оборудование") } } else { print("Машина не подготовлена") } } func orderCar() { if let lastCar = factoryCars.last { stockCars.append(lastCar) print("Машина добавлена в заказ") } } } class VolvoDealer: Dealership { var name: String var showroomCapacity: Int var stockCars: [Car] var showroomCars: [Car] var cars: [Car]{ stockCars + showroomCars } init(name: String, showroomCapacity: Int, stockCars: [Car], showroomCars: [Car]) { self.name = name self.showroomCapacity = showroomCapacity self.stockCars = stockCars self.showroomCars = showroomCars } func offerAccesirues(accesories: [String]) { print("Предложить дополнительные аксессуары \(accesories)") } func presaleService(car: Car) { if !car.isServiced { var carCopy = car carCopy.isServiced = true print("Машина найдена в базе и отправлена на предпродажную подготовку") } else { print("Машина уже на предпродажной подготовке") } } func addToShowroom(car: Car) { for i in 0...stockCars.count { if stockCars[i].model == car.model { stockCars.remove(at: i) } } for i in 0...showroomCars.count { if showroomCars[i].model == car.model { print("Машина в автосалоне") } else { showroomCars.append(car) print("Машина в автосалоне") } } } func sellCar(car: Car) { if car.isServiced { for i in 0...showroomCars.count { if showroomCars[i].model == car.model { showroomCars.remove(at: i) print("Машина продана") } else { print("Машина не в автосалоне") } } if car.accessories.isEmpty { print("Предложение купить дополнительное оборудование") } } else { print("Машина не подготовлена") } } func orderCar() { if let lastCar = factoryCars.last { stockCars.append(lastCar) print("Машина добавлена в заказ") } } } var dilersArray: [Dealership] = [] dilersArray.append(BMWDealer(name: "Leith BMW", showroomCapacity: 20, stockCars: [], showroomCars: [])) dilersArray.append(HondaDealer(name: "Honda World", showroomCapacity: 20, stockCars: [], showroomCars: [])) dilersArray.append(AudiDealer(name: "Audi Freegold", showroomCapacity: 20, stockCars: [], showroomCars: [])) dilersArray.append(LexusDealer(name: "Lexus Pulkovo", showroomCapacity: 20, stockCars: [], showroomCars: [])) dilersArray.append(VolvoDealer(name: "Volvo Family", showroomCapacity: 20, stockCars: [], showroomCars: [])) for i in 0...dilersArray.count { switch dilersArray[i].name { case let nameDiler as String: print("Слоган \(nameDiler)") } }